У меня есть 2 массива объектов: Array A и Array B. Как я могу проверить, существует ли объект из Array B в Array A., и если существует, удалите его из Array A.
Пример:
Array A: [ {"id": 1, "name": "item1"}, {"id": 2, "name": "item2"}, {"id": 3, "name": "item3"}, {"id": 4, "name": "item4"} ] Array B [ {"id": 1, "name": "item1"}, {"id": 3, "name": "item3"} ]
После удаления Array A должно выглядеть так:
[ {"id": 2, "name": "item2"}, {"id": 4, "name": "item4"} ]
Вы можете использовать array_udiff , и вы можете ссылаться на эти сообщения для сравнения столбца post1 и post2 . живая демонстрация
print_r(array_udiff($A, $B, function($a, $b){return $a['id'] == $b['id'] && $a['name'] == $b['name'] ? 0 : -1;}));
Здесь мы используем array_map
которые сначала преобразуют object
в строку с помощью json_encode
который будет преобразовывать массив в json string
тогда мы array_diff
для обоих массивов.
Попробуйте этот фрагмент кода здесь
<?php ini_set('display_errors', 1); $array1= [ (object) ["id"=> 1, "name"=> "item1"], (object) ["id"=> 2, "name"=> "item2"], (object) ["id"=> 3, "name"=> "item3"], (object) ["id"=> 4, "name"=> "item4"] ]; $array1=array_map(function($value){return json_encode($value);}, $array1); $array2= [ (object) ["id"=> 1, "name"=> "item1"], (object) ["id"=> 3, "name"=> "item3"] ]; $array2=array_map(function($value){return json_encode($value);}, $array2); $result=array_map(function($value){return json_decode($value);}, array_diff($array1, $array2)); print_r($result);
array_filter
может помочь.
$a = [ ["id"=> 1, "name"=> "item1"], ["id"=> 2, "name"=> "item2"], ["id"=> 3, "name"=> "item3"], ["id"=> 4, "name"=> "item4"] ]; print_r(array_filter($a, function($e) { return !in_array($e, [["id"=> 1, "name"=> "item1"],["id"=> 3, "name"=> "item3"]]); })); /* => Array ( [1] => Array ( [id] => 2 [name] => item2 ) [3] => Array ( [id] => 4 [name] => item4 ) ) */