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

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

问题描述:

我有两个数组,对其中的var_dump给出以下值:为什么数组数组上的array_diff返回一个空数组?

$阵列1:

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不会在数组的数组上工作吗?

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

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

+0

如果我理解正确的话,我会写我自己的功能,看是否有两个数组之间的差异,对吗? – Eldros 2011-02-10 10:14:05

来自array_diff文档。

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

array_diff manual page:“此函数只检查了n维阵列中的一名维当然可以通过使用和array_diff检查更深的尺寸($数组1 [0],$数组2 [0]);.”。

提问和回答的位置:

recursive array_diff()?