[英]Compare two associative arrays and create a new array with the matched arrays, PHP
我有这两个数组:
$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")
);
谢谢
我确信有一些现成的魔法数组函数可以处理这个,但这是一个基本的例子:
$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;
}
}
输出将与您想要的输出相同。 实例:
您可以将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');
我想这可能最终比其他答案慢,因为这将超过数组两次。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.