首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP 計算多維陣列所有數值總和:遞歸實現與 array_sum 的結合

     編輯:PHP 綜合知識

問題

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)避免堆疊溢位
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved