如何在PHP中批量处理同名前缀变量(求和/逻辑运算)
PHP批量处理带统一前缀的变量
实现case_前缀变量的逻辑与运算
PHP可以通过get_defined_vars()获取当前作用域内所有已定义的变量,再筛选出目标前缀的变量进行批量运算。逻辑与运算只要有一个变量值为false,结果就为false,可以提前终止循环优化性能:
// 获取当前所有已定义变量 $allVars = get_defined_vars(); $test_of_cases = true; foreach ($allVars as $varName => $varValue) { // 匹配case_前缀(PHP8+用str_starts_with,低版本用substr($varName, 0, 5) === 'case_') if (str_starts_with($varName, 'case_')) { $test_of_cases = $test_of_cases && $varValue; // 一旦结果为false,直接跳出循环 if (!$test_of_cases) break; } }
也可以用array_filter+array_reduce的链式写法更简洁:
$caseVars = array_filter($allVars, fn($key) => str_starts_with($key, 'case_'), ARRAY_FILTER_USE_KEY); $test_of_cases = array_reduce($caseVars, fn($carry, $item) => $carry && $item, true);
实现sum_前缀变量的求和运算
同样基于get_defined_vars()筛选变量,累加前建议先判断变量是否为数值类型,避免非数值干扰:
$total_of_sums = 0; foreach ($allVars as $varName => $varValue) { // 匹配sum_前缀(PHP8+用str_starts_with,低版本用substr($varName, 0, 4) === 'sum_') if (str_starts_with($varName, 'sum_') && is_numeric($varValue)) { $total_of_sums += $varValue; } }
链式写法版本:
$sumVars = array_filter($allVars, fn($key) => str_starts_with($key, 'sum_'), ARRAY_FILTER_USE_KEY); $total_of_sums = array_sum(array_map(fn($val) => is_numeric($val) ? $val : 0, $sumVars));
注意事项
- 如果变量在全局作用域,也可以直接遍历
$GLOBALS数组($GLOBALS包含所有全局变量),替换get_defined_vars()即可。 - 低版本PHP(<8.0)没有
str_starts_with,可以用substr($varName, 0, 对应前缀长度)来判断前缀,比如case_取前5个字符,sum_取前4个字符。
内容的提问来源于stack exchange,提问作者amiens80
相关产品推荐
相关产品推荐

