PHP 內建 array_sum() 僅支援一維陣列。面對多維陣列,需自寫遞歸函數遍歷所有層級並累加數值。
<?php
function get_sum($array) {
$num = 0;
foreach($array as $k => $v) {
if(is_array($v)) {
$num += get_sum($v); // 遞歸處理子陣列
}
}
// 當前層級的數值總和(array_sum 會自動忽略非數值)
return $num + array_sum($array);
}
// 測試
$arr = [1, 2, [3, 4, [5, 6]], 7];
echo get_sum($arr); // 輸出 28
?>
$num = 0。get_sum($v) 並累加返回值。array_sum($array)(僅計算純量數值)。foreach 不進入遞歸分支,直接由 array_sum 處理。PHP 5+ 提供 array_walk_recursive() 可更簡潔實現:
<?php
$sum = 0;
array_walk_recursive($arr, function($v) use (&$sum) {
if(is_numeric($v)) $sum += $v;
});
echo $sum; // 28
?>
array_walk_recursive 會自動遍歷所有葉子節點,程式碼更簡潔且效能略優。