【问题标题】:Compare two associative arrays and create a new array with the matched arrays, PHP比较两个关联数组并使用匹配的数组创建一个新数组,PHP
【发布时间】:2011-02-22 08:10:46
【问题描述】:

我有这两个数组:

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

谢谢

【问题讨论】:

    标签: php arrays compare extract associative-array


    【解决方案1】:

    我确信有一些现成的神奇数组函数可以处理这个问题,但这里有一个基本示例:

    $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

    【讨论】:

    • 确实可以完美运行,输出我需要的东西。谢谢你。我也确信有一个现成的数组函数可以使用,我试过但无法得到结果。再次感谢您,我将使用您的代码。
    【解决方案2】:

    您可以将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');
    

    我猜这最终可能会比其他答案慢,因为这将遍历数组两次。

    【讨论】:

      猜你喜欢
      • 2012-05-03
      • 2018-01-27
      • 1970-01-01
      • 2014-08-08
      • 1970-01-01
      • 2022-10-08
      • 1970-01-01
      • 1970-01-01
      • 2018-05-18
      相关资源
      最近更新 更多