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