2013-10-09 44 views
1

我有兩個多維數組,例如:如何在沒有手動迭代的情況下交叉多維數組?

array(
    'a' => array(
    'code1' => array('v1', 'v2'), 
    'code2' => array('v1', 'v2') 
), 
    'b' => array(
    'code3' => array('v1', 'v2'), 
    'code4' => array('v1', 'v2'), 
    'code5' => array('v1', 'v2'), 
    'code6' => array('v1', 'v2') 
) 
) 

array(
    'a' => array(
    'code1' => '', 
), 
    'b' => array(
    'code5' => '' 
) 
) 

我期望的結果是:

array(
    'a' => array(
    'code1' => array('v1', 'v2') 
), 
    'b' => array(
    'code5' => array('v1', 'v2') 
) 
) 

我敢肯定它可以利用內置一個是可能的 - 在PHP函數,但我堅持下去,並找不到解決方案,而不是手動迭代通過數組。 你能幫我嗎?

+0

多次閱讀您的問題無法得到您的請求 – Nes

+0

不知道爲什麼你不明白我的要求。我給你兩個輸入數組,以及我想要的結果。簡單的array_intersect族函數將不起作用,因爲它是多維數組。我想知道是否有任何其他函數可以產生輸出數組而不需要手動迭代數組 – Marrbacca

+0

@Marrbacca你是什麼意思手動迭代?在所有情況下都沒有內置的交叉功能。有時候,你必須使用一個循環,而且沒有什麼「錯誤」。喬恩的答案是要走的路。 – Boaz

回答

1

確切的解決方案將取決於你希望發生的事情,如果兩個數組不完全匹配鍵明智的,但要達到你想要的效果的一種方法是:

$a = array(
    'a' => array(
    'code1' => array('v1', 'v2'), 
    'code2' => array('v1', 'v2') 
), 
    'b' => array(
    'code3' => array('v1', 'v2'), 
    'code4' => array('v1', 'v2'), 
    'code5' => array('v1', 'v2'), 
    'code6' => array('v1', 'v2') 
) 
); 

$b = array(
    'a' => array(
    'code1' => '', 
), 
    'b' => array(
    'code5' => '' 
) 
); 

$result = array(); 
foreach ($a as $key => $data) { 
    $result[$key] = array_intersect_key($data, $b[$key]); 
} 

的想法是使用array_intersect_key僅保留$a中出現的那些元素(作爲鍵)在$b中。

+0

這兩個數組中的鍵將始終匹配 - 您的解決方案與我需要的更接近,謝謝:)。我也試圖實現這個使用array_uintersect函數與回調來刪除每個foreach。你認爲這可能嗎? – Marrbacca

+0

@Marrbacca:不,''array_uintersect'只允許你指定比較邏輯 - 它不允許你自定義處理。 – Jon

+0

這就是我想的,我問這個問題來確認。感謝您的解決方案,這是正確的,完美的工作:) – Marrbacca

相關問題