2017-05-08 197 views
3

我有兩個數組,其中包含產品代碼作爲鍵和數量作爲值('code'=> quantity)。我想生成一個數組,其中包含舊數組(array1)和新數組(array2)之間的數量差異,包括從array1添加或刪除的任何代碼到array2。兩個數組之間的差異值

$array1 = ['code1' => 1, 'code2' => 2];  
$array2 = ['code1' => 0, 'code2' => 2, 'code3' => 3]; 

// Array expected 
$diffQty = [ 
    'code1' => -1, // 1 quantity deleted in array 2 
    'code2' => 0, // quantity no changed between array1 and array2 
    'code3' => 3 // new code added in array2 with 3 quantity 
]; 

我想是這樣的,但我沒有陣列之間添加或刪除代碼:

$diffQty = []; 
foreach ($array2 as $code => $qty) { 
    if (array_key_exists($code, $array1)) { 
     $diffQty = $array1[$code] - $array2[$code]; 
     $diffQty[$code] = $diffQty; 
    } 
} 
+2

我想看看你有什麼企圖。 –

+0

嗨@u_mulder我編輯了我的文章 – Damosse31

回答

2

您當前的問題是,你沒有的情況下作出任何事情,關鍵沒有按在兩個陣列中都不存在。

獲取存在的所有唯一鍵,並將其放入單獨的數組中。循環結果數組,該數組現在包含數組$array1$array2中存在的所有鍵。從$array2減去$array1中的值,如果在任一數組中都沒有有效的密鑰,則將其默認爲零。

結果的
$array1 = ['code1' => 1, 'code2' => 2];  
$array2 = ['code1' => 0, 'code2' => 2, 'code3' => 3]; 
$all_keys = array_unique(array_merge(array_keys($array1), array_keys($array2))); 
$output = array(); 

foreach ($all_keys as $code) { 
    $output[$code] = (!empty($array2[$code]) ? $array2[$code] : 0) - (!empty($array1[$code]) ? $array1[$code] : 0); 
} 

$output

Array (
    [code1] => -1 
    [code2] => 0 
    [code3] => 3 
) 

Live demo

+0

它的工作,但如果我從$ array1中刪除code2,它不會被添加到$輸出(如'code2'=> -2) – Damosse31

+0

這個問題沒有明確說明,但修改後的答案應該適用於此。 – Qirel

+0

這是在我的問題(「包括添加或從array1刪除任何代碼到array2」)。你的解決方案很好,謝謝! – Damosse31