为什么数组数组上的array_diff返回一个空数组?

时间:2011-02-10 10:02:29

标签: php

我有两个数组,var_dump为其提供以下值:

$ ARRAY1:

Artifacts:array(2) { [0]=>  array(3) { [0]=>  string(7) "module1" [1]=>  string(16) "path/to/file.txt" [2]=>  string(0) "" } [1]=>  array(3) { [0]=>  string(7) "module2" [1]=>  string(17) "path/to/file2.txt" [2]=>  string(0) "" } }

$数组2:

Artifacts:array(1) { [0]=>  array(3) { [0]=>  string(7) "module1" [1]=>  string(16) "path/to/file.txt" [2]=>  string(0) "" } }

我认为做array_diff($array1,$array2)会给我一个只计算第二个元素的数组。相反,我有一个空数组。我尝试切换参数,仍然是一个empty_array,但这一次毫不奇怪。 array_diff不会对数组数组起作用吗?

4 个答案:

答案 0 :(得分:6)

来自documentation

  

当且仅当(string) $elem1 === (string) $elem2时,才认为两个元素相等。用文字表示:当字符串表示相同时。

echo (string) array();只提供Array,因此对于array_diff,您的数组看起来像:

$array1 = array('Array', 'Array');
$array2 = array('Array');

所以要为你的数组创建一个diff,你需要这样的东西(假设数组中的每个元素本身就是一个数组):

$diff = array();

foreach($array1 as $val1) {
    $contained = false;
    foreach($array2 as $val2) {
        if(count(array_diff($val1, $val2)) == 0) {
            $contained = true; 
            break;
        }
    }
    if(!$contained) {
        $diff[] = $val1;
    }
}

免责声明:这或多或少只是草图。

答案 1 :(得分:3)

来自array_diff文档。

  

此函数仅检查n维数组的一维。当然你可以使用array_diff($ array1 [0],$ array2 [0])来检查更深的维度;

答案 2 :(得分:1)

来自array_diff manual page:“此函数仅检查n维数组的一个维度。当然,您可以使用array_diff($ array1 [0],$ array2 [0]);来检查更深的维度。 “

答案 3 :(得分:0)

在这里提问并回答:

recursive array_diff()?