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

PHP:解析含布尔与逻辑运算符的数组为条件表达式的最优方法(避eval)

不使用eval实现PHP布尔数组转条件判断

完全可行,而且能严格遵循PHP逻辑运算符的优先级(&&优先级高于||)计算结果,全程无需用到eval。最直接有效的方式是分两步处理:先计算所有&&运算,再处理剩余的||运算,具体实现如下:

实现思路

因为&&的优先级比||高,不能直接从左到右依次计算。我们需要先遍历数组,把所有&&对应的运算结果替换回数组;等所有&&处理完成后,再处理剩下的||运算,最终得到整个条件的布尔结果。

代码实现

function calculateBooleanCondition(array $conditionArr) {
    // 第一步:处理所有&&运算
    $index = 1;
    while ($index < count($conditionArr)) {
        if ($conditionArr[$index] === '&&') {
            // 计算当前&&前后的布尔值
            $calcResult = $conditionArr[$index - 1] && $conditionArr[$index + 1];
            // 用结果替换掉「前值、&&、后值」这三个元素
            array_splice($conditionArr, $index - 1, 3, $calcResult);
            // 重置索引,重新遍历数组(数组长度已改变)
            $index = 1;
        } else {
            $index += 2;
        }
    }

    // 第二步:处理所有||运算
    $index = 1;
    while ($index < count($conditionArr)) {
        if ($conditionArr[$index] === '||') {
            $calcResult = $conditionArr[$index - 1] || $conditionArr[$index + 1];
            array_splice($conditionArr, $index - 1, 3, $calcResult);
            $index = 1;
        } else {
            $index += 2;
        }
    }

    // 最终数组只剩一个布尔值,即整个条件的结果
    return $conditionArr[0];
}

// 测试示例数组
$booleans = [true, '||', false, '&&', true, '||', false];
$result = calculateBooleanCondition($booleans);

// 用结果执行条件判断
if ($result) {
    // 执行操作
    echo "条件成立";
} else {
    // 执行其他操作
    echo "条件不成立";
}

方案优势

  1. 安全可靠:完全规避了eval带来的代码注入风险;
  2. 结果准确:严格按照PHP的运算符优先级计算,和直接写条件语句的结果一致;
  3. 高效直观:通过数组替换的方式处理运算,逻辑清晰,对于常规长度的数组效率足够。

内容的提问来源于stack exchange,提问作者Ood

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 19:10:52