我有一个包含10个不同数值的数组。我们将此数组称为$values
。我还有另外10种不同表达式的数组。我们将此数组称为$expression
。
我必须将$values
中每个表达式中的$expressions
中的每个值一一替换,并检查最终结果。我该怎么办?
[值示例:2, 8, 10, 9, 5
等表达式的示例值:5*$employees + 18
或10*$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函数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);
您可以尝试使用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);