如果存在,PHP将从另一个中删除数组项
我有两个对象数组:数组A和数组B。如何检查数组A中是否存在数组B中的对象。如果存在,如何将其从数组A中删除 例如:如果存在,PHP将从另一个中删除数组项,php,arrays,multidimensional-array,array-difference,Php,Arrays,Multidimensional Array,Array Difference,我有两个对象数组:数组A和数组B。如何检查数组A中是否存在数组B中的对象。如果存在,如何将其从数组A中删除 例如: Array A: [ {"id": 1, "name": "item1"}, {"id": 2, "name": "item2"}, {"id": 3, "name": "item3"}, {"id": 4, "name": "item4"} ] Array B [ {"id": 1, "n
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"}
]
移除阵列后,阵列应如下所示:
[
{"id": 2, "name": "item2"},
{"id": 4, "name": "item4"}
]
您可以使用,也可以参考这些文章进行数组比较和分析
这里我们使用的是
array\u map
,它首先使用json\u encode
将array\u映射转换为字符串,然后我们为两个数组找到array\u diff
array\u 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
)
)
*/
我做错了什么@这是我的错,我现在编辑它。并添加了演示,您现在可以查看它。谢谢你的评论。我还做错了什么@问题是数组,而不是对象的ojbect.array你可以使用我在任何地方看到的技巧-$ArrayA=array\u map('serialize',$ArrayA)$ArrayB=数组映射('serialize',$ArrayB)$ArrayA=array_diff($ArrayA,$ArrayB)$ArrayA=数组映射('unserialize',$ArrayA);印刷费($ArrayA)代码>我在这里找到了答案
<?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);
$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
)
)
*/