簡體   English   中英

如何對多維數組中的列值或多個值求和?

[英]How to sum column value or multiple values in multi-dimensional array?

如何通過關聯鍵添加所有列值? 請注意,鍵集是動態的,並且某些鍵值不止一個。

示例數組:

$myArray = array(
    ["apple" => 2,"orange" => 1,"lemon" => 4,"grape" => 5],
    ["apple" => 5,"orange" => 0,"lemon" => 3,"grape" => 2],
    ["apple" => 3,"orange" => 0,"lemon" => 1,"grape" => 3],
);

使用單個鍵值,我可以使用下面的代碼輕松地對列值求和。

$sumArray = array();

foreach ($myArray as $k => $subArray) 
{
  foreach ($subArray as $id => $value) 
  {
    if (array_key_exists($id, $sumArray)) 
    {
        $sumArray[$id] += $value;
    } else {
        $sumArray[$id] = $value;
    }
  }
}
echo json_encode($sumArray);

結果將如下所示:

{"apple":10,"orange":1,"lemon":8,"grape":10}

對於多個鍵值,上面的代碼不起作用。 如果鍵值大於一個,如何對列值求和?

示例數組:

$myArraymulti = array(
   ["apple" => 2,"orange" => 1,"lemon" => [4, 2],"grape" => 5],
   ["apple" => 5,"orange" => [0, 2],"lemon" => 3,"grape" => 2],
   ["apple" => 3,"orange" => 0,"lemon" => 1,"grape" => [3, 8]],
);

期望的結果:

{"apple":10,"orange":3,"lemon":10,"grape":18}

檢查該值是否為數組。 如果是,則在添加到關聯數組時使用元素的總和而不是值本身。

foreach ($myArray as $k => $subArray) 
{
  foreach ($subArray as $id => $value) 
  {
    if (is_array($value)) {
      $value_to_add = array_sum($value);
    } else {
      $value_to_add = $value;
    }
    if (array_key_exists($id, $sumArray)) 
    {
        $sumArray[$id] += $value_to_add;
    } else {
        $sumArray[$id] = $value_to_add;
    }
  }
}

不過,我建議你修復你的數據結構。 您應該只將每個值都設為數組,而不是混合單例和 arrays,因此您不必在處理數據的所有代碼中使用條件。

$keys = [];
forEach($myArraymulti as $array){    
    $keys =  array_merge(array_keys($array), $keys);
}
$res = [];
forEach(array_unique($keys) as $key){
    forEach($myArraymulti as $array){
        if(isset($array[$key])){
            $res[$key] =    (isset($res[$key]) ? $res[$key] : 0) + 
                            (is_array($array[$key]) ? array_sum($array[$key]) : $array[$key]); 
        }
    }
}
$res = json_encode($res));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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