在PHP中依次评估数组中的表达式

问题描述 投票:0回答:2

我有一个包含10个不同数值的数组。我们将此数组称为$values。我还有另外10种不同表达式的数组。我们将此数组称为$expression

我必须将$values中每个表达式中的$expressions中的每个值一一替换,并检查最终结果。我该怎么办?

[值示例:2, 8, 10, 9, 5等表达式的示例值:5*$employees + 1810*$days - 4

[当我遍历表达式时,我希望$ employees具有2、8、10、9、5等的所有值。然后我希望$ days在下一个循环中具有所有这些值。

到目前为止是我的代码:

function evaluate_everything($values, $expressions) {
    for($i = 0; $i < count($values); $i++) {
        foreach($expressions as $expression) {
            //Put value is expression.
        }
    }
    return true;
}
php arrays for-loop
2个回答
1
投票

以下代码有效。 PHP函数eval()用于将字符串作为表达式求值:

function evaluate_everything($values, $expressions) {
    $output = [];
    foreach($expressions as $expression) {
        $row = [];
        foreach($values as $value){
            $str = '';
            eval("\$str = \"$expression\";");
            $result= eval('return '.$str.';');
            array_push($row, $result);
        }
        array_push($output, $row);
    }
    return $output;
}


$values = [1, 2, 3];

$expression1 = '5*$value + 18';
$expression2 = '10*$value - 4';
$expression3 = '$value + 42';
$expressions = [$expression1, $expression2, $expression3];

$resultArray = evaluate_everything($values, $expressions);

var_dump($resultArray);

1
投票

您可以尝试使用array_map函数,并且您的表达式可以定义为函数:

function square($v) {
    return $v * $v;
}

function cube($v) {
    return $v * $v * $v;
}

function evaluate_everything($values, $expressions) {
    $results = [];

    foreach($values as $value) {
        foreach($expressions as $expression) {
            $results[] = array_map($expression, $value);
        }
    }

    return $results;
}

$vals1 = [1, 2, 3, 4, 5];
$values = [$vals1];
$expressions = ["square", "cube"];

$results = evaluate_everything($values, $expressions);

print_r($results);
© www.soinside.com 2019 - 2024. All rights reserved.