PHP中跳过非数值字符串实现变量数值累加的简易方法
PHP自动跳过非数值字符串实现整数累加的简便方案
核心思路
零散定义的字符串变量不需要提前手动整理为数组,也不需要逐个写判断逻辑,通过PHP内置函数快速聚合变量、过滤非整数值后直接求和即可,全程不会触发非数值运算的警告或错误。
最优实现方案
使用compact()函数快速聚合待计算的零散变量,配合过滤函数筛掉非整数字符串,最后用内置求和函数计算结果,代码简洁且执行效率高:
<?php $val1 = "1"; $val2 = "2"; $val3 = "3"; $val4 = "k.A"; $val5 = "k.A"; $val6 = "5"; // 传入待计算的变量名,自动聚合为数组,无需手动逐个赋值到数组 $checkList = compact('val1', 'val2', 'val3', 'val4', 'val5', 'val6'); // 过滤:仅保留纯整数字符串,非数值内容直接跳过 $validInts = array_filter($checkList, fn($item) => ctype_digit($item)); // 直接求和得到结果 $total = array_sum($validInts); echo $total; // 输出结果11,完全符合预期 ?>
场景适配说明
- 如果待计算的整数包含负数(存储为类似"-12"的字符串),把过滤条件替换为
fn($item) => preg_match('/^-?\d+$/', $item)即可 - 如果需要同时支持浮点型数值字符串(比如"12.5"),把过滤条件替换为
fn($item) => is_numeric($item)即可 - 如果待计算变量有统一命名前缀(比如全部以
val开头),可以用get_defined_vars()获取当前作用域所有变量后按前缀过滤,不过该方式会拉取当前作用域所有变量,容易引入无关值,优先推荐compact()的可控写法
注意事项
该方案兼容PHP 7.0+全版本,不会像直接加法运算那样在PHP 8.0+版本触发非数值运算的TypeError,也不会在低版本抛出E_WARNING警告。
内容的提问来源于stack exchange,提问作者Vika
相关产品推荐
相关产品推荐

