[英]PHP add value to existing array value
我目前有兩個數組,每個數組中的鍵是產品ID,而值是數量:
$array_1 = ([10] => 1, [13] => 3, [27] => 1, [32] => 2);
$array_2 = ([8] => 1, [10] => 1, [12] => 1, [20] => 2, [27] => 1);
我想組合兩個數組,但將值添加到鍵匹配的位置。 有沒有一種方法可以在不迭代數組的情況下執行此操作?
以下是我對將兩個數組合並在一起的最短路徑的看法。 可能有一個我不知道的內置函數,但它會將兩個數組合並到$array_1
。
foreach($array_1 as $k => $v)
foreach($array_2 as $i => $j)
if($k == $i) {
$array_1[$k] = $v + $j;
break;
}
編輯 - 發現時break
。
編輯 - (感謝KC)
foreach($array_1 as $k => $v)
if(isset($array_2[$k])) {
$array_1[$k] += $array_2[$k];
unset($array_2[$k]);
}
foreach($array_2 as $k => $v)
$array_1[$k] = $v;
PHP本機數組函數提供了一些分割和分組數組的方法,但是不可能添加( array_sum
並沒有真正幫助)。
因此,當我們推薦您沒有特別要求的解決方案時,這里有一個較短的解決方案:
foreach ($array_2 as $i=>$k) {
$array_1[$i] += $k;
}
您可以使用內置的合並函數進行數組。
array_merge(數組1,數組2,ARRAY3 ...);
在這里使用你的數組名是你如何做到array_merge($array_1 , $array_1);
“沒有迭代”沒有。 即使你將它們包裝到諸如array_map
函數中array_map
一個迭代(它只在代碼本身中不可見;))
$result = array_merge_recursive($array_1, $array_2);
在唯一鍵上,這將保留原樣。 在兩個相同的鍵上,它將兩個值合並為一個數組。 PHP5.3中的一個很好的解決方案
$result = array_map (function ($item) {
return is_array($item)
? $item[0] + $item[1]
: $item;
}, $result);
非5.3解決方案也不是那么難看
foreach ($result as &$item) {
if (is_array($item)) $item = $item[0] + $item[1];
}
更新:
如果我現在閱讀你的問題,我懷疑,我理解你的意思是“將價值加在一起”。 真正添加產品ID和數量沒有多大意義。 但是,只需用你需要的操作替換上面的+
:)
這是功能:
<?php function merge($array1, $array2) { if(sizeof($array1)>sizeof($array2)) { echo $size = sizeof($array1); }else{ $a = $array1; $array1 = $array2; $array2 = $a; echo $size = sizeof($array1); } $keys2 = array_keys($array2); for($i = 0;$i<$size;$i++) { $array1[$keys2[$i]] = $array1[$keys2[$i]] + $array2[$keys2[$i]]; } $array1 = array_filter($array1); return $array1; } ?>
從這里采取
在我看來,這是最完美的解決方案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.