2012-05-24 68 views
1

說我有在PHP兩個複雜嵌套的數組,像這樣的:如何檢查PHP關聯數組是否相等,忽略鍵排序?

$a = array(
    "x" => array(4, 5, 6), 
    "y" => array("z" => "foo", "q" => "bar") 
    ); 
$b = array(
    "y" => array("q" => "bar", "z" => "foo"), 
    "x" => array(4, 5, 6) 
    ); 

(從不同的來源在這種情況下,他們的解碼JSON數據)。假設內容可以任意嵌套,但不包含任何循環引用。

什麼是最直接的方法來檢查它們是否相等,忽略鍵排序?例如,以上兩者應該比較相等。但是,如果$b["x"]array(4, 6, 5)他們不會。

我可以遞歸ksort並比較結果,但我並不想修改任何一個操作數,這看起來像是可能有一個我不知道的簡單單行解決方案。那裏有什麼嗎?

+3

複製數組,進行排序並進行比較。這樣,你仍然有原始的 –

+0

是的 - 這是那些「默認」的數字指標,可以幫助你。否則,'$ a == $ b'可以正常工作,而不必關心訂單。 –

+0

$ a == $ b在上述情況下實際上是錯誤的,因爲x和y鍵是相反的,並且z和q鍵在y內反轉。 –

回答

2

執行此操作的最佳方法已由您提及。但你忘了1件事。

  1. 複製陣列
  2. 排序陣列
  3. 比較2

一樣嗎?完善。你仍然有原創。