You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 17:12:34