簡體   English   中英

PHP為現有數組值添加值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM