比较两个关联数组并创建一个新的数组,其中包含匹配的数组,PHP。

7

I have this two arrays:

$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")  
           );

谢谢

2个回答

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;
    }
}

输出将与您所期望的相同。以下是实时示例:

http://codepad.org/c4hOdnIa


确实很完美,输出了我需要的内容。谢谢你。我也相信有一个现成的数组函数可以使用,我尝试过但没有得到结果。再次感谢,我会使用你的代码。 - dciccale

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');

我猜这个方法可能比其他答案慢,因为它需要两次遍历数组。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接