PHP удаляет элементы массива из другого, если существует
У меня есть 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"}
]
3 ответа
Вы можете использовать http://php.net/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
)
)
*/