php中关联数组数组的array_diff

时间:2013-11-13 21:07:50

标签: php arrays php-5.3

我有两个表格

的数组

Array1:
[0]=> Array([name] => foo [id] => 12)
[1]=> Array([name] => bar [id] => 34)

Array2:
[0]=>Array([name] => bar [id]=> 34)
[1]=>Array([name] => baz [id]=> 56)

数组来自数据库,任何两对都可以具有相同的名称,但ID是唯一的。我试图通过ID比较数组,所以:

$one_not_two = array_diff($array1[id], $array2[id]);
但这不会返回任何东西。我也试过了 $one_not_two = array_diff($array1[id], $array2[id]);
返回错误“参数不是数组”。最初我通过将ID提取到一维数组中来解决这些问题,然后比较这些,但现在一个新功能需要我比较这些对。有什么建议吗?

PS我们的服务器正在运行php 5.3,如果这有任何区别。

5 个答案:

答案 0 :(得分:3)

因为数组是多维的,你必须像这样提取id:

$ids1 = array();
foreach($array1 as $elem1)
    $ids1[] = $elem1['id'];

$ids2 = array();
foreach($array2 as $elem2)
    $ids2[] = $elem2['id'];

$one_not_two = array_diff($ids1,$ids2);

有关您的具体问题,请查看array_diff() with multidimensional arrays

答案 1 :(得分:0)

您可以使用array_udiff创建自定义差异功能:

$diff = array_udiff($array1,
                    $array2,
                    function ($a, $b){
                        if($a['id'] == $b['id']){
                            return 0;
                        } else {
                            return ($a['id'] < $b['id'] ? -1 : 1);
                        }
                    }
                );

http://codepad.viper-7.com/2u5EWg

答案 2 :(得分:0)

如果id是唯一的,你可以这样做:

$one_not_two = array();

foreach ($array1 as $val) {
    $one_not_two[$val['id']] = $val;
}

foreach ($array1 as $val) {
    if (!isset($one_not_two[$val['id']])) {
        $one_not_two[$val['id']] = $val;
}

答案 3 :(得分:0)

最后,我通过将Array1更改为name => id

的关联数组来解决它

答案 4 :(得分:0)

遇到与您相同的问题。

使用$result = array_diff_assoc($array2, $array1);

解决了它

参考:PHP: array_diff_assoc