2011-02-10 112 views
4

我有兩個數組,對其中的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不會在數組的數組上工作嗎?

回答

5

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

3

來自array_diff文檔。

該函數僅檢查n維數組的一個維度。當然你可以使用array_diff($ array1 [0],$ array2 [0])來檢查更深層次的維度。

0

array_diff manual page:「此函數只檢查了n維陣列中的一名維當然可以通過使用和array_diff檢查更深的尺寸($數組1 [0],$數組2 [0]);.」。

相關問題