不能。array_sum只处理一维数组,多维数组中子数组会被当作0或触发警告;需先扁平化,推荐array_walk_recursive安全高效,json_encode+正则快但易误匹配。
array_sum 能直接累加多维数组吗?
不能。array_sum 只处理一维数组,遇到嵌套结构会把子数组当 0 或触发警告(PHP 8.0+ 报 Warning: array_sum(): Argument #1 ($array) must be of type array, int given 这类错误)。比如:
$arr = [1, [2, 3], 4]; echo array_sum($arr); // 输出 5([2,3] 被当成 0)
想对「PISO」类多维数组求和,得先扁平化
所谓“PISO”(可能指“PHP 多维数组”误写或特定业务缩写),实际就是含多层键值的嵌套数组。必须先展开再求和。推荐两种稳妥方式:
- 用
array_walk_recursive收集所有数值:$flat = []; array_walk_recursive($arr, function($v) use (&$flat) { if (is_numeric($v)) $flat[] = (float)$v; }); $sum = array_sum($flat); - 用
json_encode+ 正则提取数字(仅限纯数据、无字符串干扰时):$nums = array_map('floatval', preg_match_all('/-?\d+\.?\d*/', json_encode($arr), $m) ? $m[0] : []); $sum = array_sum($nums);—— 这种写法快但危险,一旦数组里有带数字的字符串(如
"item_123"),就会误匹配
array_sum 的隐式类型转换陷阱
array_sum 对非数字值一律转为 0,但这个过程不报错,容易掩盖数据问题: