繁体   English   中英

比较两个关联数组并使用匹配的数组PHP创建一个新数组

[英]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;
    }
}

输出将与您想要的输出相同。 实例:

http://codepad.org/c4hOdnIa

您可以将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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM