我有这两个数组:
$arr1=array( array("id" => 8, "name" => "test1"),
array("id" => 4, "name" => "test2"),
array("id" => 3, "name" => "test3")
);
$arr2=array( array("id" => 3),
array("id" => 4)
);
如何从$ arr1(其中id在$ arr2中具有相同值)中“提取”数组到新数组中并将提取的数组保留在新数组中,而不考虑关键顺序?
我正在寻找的输出应该是:
$arr3=array(
array("id" => 8, "name" => "test1")
);
$arr4=array( array("id" => 4, "name" => "test2"),
array("id" => 3, "name" => "test3")
);
由于
答案 0 :(得分:6)
我确信有一些现成的魔法数组函数可以处理这个,但这是一个基本的例子:
$ids = array();
foreach($arr2 as $arr) {
$ids[] = $arr['id'];
}
$arr3 = $arr4 = array();
foreach($arr1 as $arr) {
if(in_array($arr['id'], $ids)) {
$arr4[] = $arr;
} else {
$arr3[] = $arr;
}
}
输出与您想要的输出相同。实例:
答案 1 :(得分:3)
您可以将array_udiff()
和array_uintersect()
与自定义比较功能结合使用。
function cmp($a, $b) {
return $a['id'] - $b['id'];
}
$arr3 = array_udiff($arr1, $arr2, 'cmp');
$arr4 = array_uintersect($arr1, $arr2, 'cmp');
我猜这可能最终比其他答案慢,因为这将会超过阵列两次。