array_sum() 僅支援一維陣列,多維陣列需自行遞歸。
function get_sum($array) {
$num = 0;
foreach ($array as $k => $v) {
if (is_array($v)) {
$num += get_sum($v); // 遞歸處理子陣列
}
}
return $num + array_sum($array); // 當前層級數值總和 + 子層總和
}
// 測試
$arr = [1, 2, [3, 4, [5, 6]], 7];
echo get_sum($arr); // 輸出 28 (1+2+3+4+5+6+7)
get_sum([1, 2, [3, 4, [5, 6]], 7]) ├─ array_sum([1,2,[...],7]) = 10 (忽略子陣列) ├─ get_sum([3,4,[5,6]]) │ ├─ array_sum([3,4,[...]]) = 7 │ ├─ get_sum([5,6]) │ │ ├─ array_sum([5,6]) = 11 │ │ └─ return 11 │ └─ return 7+11 = 18 └─ return 10+18 = 28
function get_sum_deep($data) {
if (is_object($data)) $data = get_object_vars($data);
if (!is_array($data)) return is_numeric($data) ? $data : 0;
$sum = 0;
foreach ($data as $v) $sum += get_sum_deep($v);
return $sum;
}
ini_set('xdebug.max_nesting_level', 500) 調整RecursiveArrayIterator)避免堆疊溢位