php - сравнить два массива и, если индекс идентичен, удалить его

1

Как я могу удалить индекс массива, сравнив его с другим индексом массива?

PHP:

    $results = array ( array(
            "Name" => $NameUser, 
            "Surname" => $SurnameUser, 
            "MyComment" => $MyComment,
            "VideoPath" => $VideoPath,
            "Reg_Date" => $Reg_Date, 
            "ThumbPath" => $ThumbPath, 
            "UserId" => $UserId
            ));  
    print_r($results[0]); // Array ( [Name] => aaa [Surname] => aaa [MyComment] => aaa [VideoPath] => aaa [Reg_Date] => aaa [ThumbPath] => aaa [UserId] => aaa)

$JSON_List = file_get_contents('test.json');
$arr = json_decode($JSON_List);
print_r($arr[0]); // stdClass Object ( [Name] => aaa [Surname] => aaa [MyComment] => aaa [VideoPath] => aaa [Reg_Date] => aaa [ThumbPath] => aaa [UserId] => aaa )

Я вижу, что эти два индекса идентичны, я использую цикл for, но он ищет, что php не считает их одинаковыми.

Как я могу правильно сравнить массив и если они идентичны, удалите идентичный индекс массива из списка?

PHP:

foreach ($arr as $index)  {

    $countIndex++;

    print_r($countIndex);

    if ($arr[$countIndex - 1] == $results[0]) {

        print_r("array is identical \n");
    }else{

        print_r("array is not identical \n");
    }

}
Теги:
arrays
compare

3 ответа

0
Лучший ответ

Имея 2 массива:

$results = array ( array(
        "Name" => '$NameUser', 
        "Surname" => '$SurnameUser', 
        "MyComment" => '$MyComment',
        "VideoPath" => '$VideoPath',
        "Reg_Date" => '$Reg_Date', 
        "ThumbPath" => '$ThumbPath', 
        "UserId" => '$UserId'
    )
);  
// print_r($results[0]); 
//$JSON_List = file_get_contents('test.json');
//$arr = json_decode($JSON_List);
$arr = array(array(//simulate
        "Name" => '$NameUser', 
        "Surname" => '$SurnameUser', 
        "MyComment" => '$MyComment',
        "VideoPath" => '$VideoPath',
        "Reg_Date" => '$Reg_Date', 
        "ThumbPath" => '$ThumbPath', 
        "UserId" => '$UserId'
    ),
    array(
        "Name" => '$NameUser2', 
        "Surname" => '$SurnameUser2', 
        "MyComment" => '$MyComment2',
        "VideoPath" => '$VideoPath2',
        "Reg_Date" => '$Reg_Date2', 
        "ThumbPath" => '$ThumbPath', 
        "UserId" => '$UserId2'
));

//Search identicals
function search_identicals(&$arr,$results){
    $response = array();
    foreach($results as $k=>$value){
        array_walk($arr,function($elem,$key)use($value,&$response,&$arr){
            $resp = array_diff($elem,$value);
            if(empty($resp)){
                unset($arr[$key]);
                array_push($response,$elem);
            }
        });
    }
    return ($response) ? $response : false;
}

$identicals = search_identicals($arr,$results);
var_dump('to delete');
var_dump($identicals);
var_dump('deleted');
var_dump($arr);

//Вам это нужно только:

function search_identicals(&$arr,$results){//&$arr by reference
    foreach($results as $k=>$value){
        array_walk($arr,function($elem,$key)use($value,&$arr){
            $resp = array_diff($elem,$value);//if is identical, return empty
            if(empty($resp)){
                unset($arr[$key]);//remove repeated
            }
        });
    }
}
  • 0
    Я получаю предупреждение: array_diff (): Аргумент # 1 не является массивом
  • 0
    Я сделал это, чтобы работать, и функция удаляет ключ. Однако, если я сохраню его обратно в файл json, его формат изменится на '{"1": {}}' вместо '[{"", ""}, {"", ""} ...]
Показать ещё 1 комментарий
2

Простой способ проверить, имеются ли два ключа в двух отдельных массивах, используется array_intersect_key().

$sameKeys = array_intersect_key($arr1, $arr2);
  • 0
    Я получаю фатальную ошибку: вызов неопределенной функции array_intersect_keys ()
  • 0
    Моя, плохая, орфографическая ошибка, это array_intersect_key ()
0

Вы можете использовать это: array_unique( array_merge($arr1, $arr2) );

Или это:

$arr_1 = array_diff($arr1, $arr2);
$arr_2 = array_diff($arr2, $arr1);
  • 0
    я получаю Catchable фатальную ошибку: объект класса stdClass не может быть преобразован в строку в

Ещё вопросы

Сообщество Overcoder
Наверх
Меню