2009-07-15 119 views
0

我想比較多維數組,但我不能只使用array_diff_assoc()。我試圖比較的數組都是關聯數組,它們都進行了排序,因此鍵的順序相同。大多數情況下,陣列的結構是相同的。我似乎無法弄清楚如何比較存儲數組的元素,我可以比較擁有一個值的元素就好了別人知道我能做什麼嗎?比較PHP中的多維數組

感謝您的幫助!

回答

1

目前還不清楚您是要查看它們是否相同,或者實際上是否需要輸出差異。

如果是前者,那麼你可以做到這一點的正確方法,用遞歸函數:

$array1 = array('a' => 1, 'b' => 2, 'c' => array('ca' => 1, 'cb' => array('foo'))); 
$array2 = array('a' => 1, 'b' => 2, 'c' => array('ca' => 1, 'cb' => array('bar'))); 

var_dump(arrayEqual($array1, $array2)); 

function arrayEqual($a1, $a2) 
{ 
    if (count(array_diff($a1, $a2))) 
     return false; 

    foreach ($a1 as $k => $v) 
    { 
     if (is_array($v) && !arrayEqual($a1[$k], $a2[$k])) 
      return false; 
    } 

    return true; 
} 

或者使用這樣一個完整的黑客:

if (serialize($array1) == serialize($array2)) 
3

如果你想只看到如果它們不同(並且沒有什麼特別的不同),你可以嘗試類似於:

return serialize($array1) == seralize($array2); 

這會讓你對這兩個數組的平等感到滿足。

+0

創意。我喜歡。 +1 – 2009-07-15 18:41:21