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

PHP 計算多維陣列所有值總和的遞歸實現

     編輯:PHP 相關知識

PHP 計算多維陣列所有值總和的遞歸實現

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
?>

邏輯解析

  1. 初始化累加器 $num = 0。
  2. 遍歷陣列,若值為陣列則遞歸呼叫 get_sum($v) 並累加返回值。
  3. 最後加上當前層級 array_sum($array)(僅計算純量數值)。
  4. 遞歸終止條件:遇到非陣列值,foreach 不進入遞歸分支,直接由 array_sum 處理。

替代方案:array_walk_recursive

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 會自動遍歷所有葉子節點,程式碼更簡潔且效能略優。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved