0
$operators = array(
    "+",
    "-",
    "*",
    "/"
);

foreach($operators as $key => $opp){
    //echo "key: $key, opperator: $opp <br />";
    echo $result = 4 . $opp . 4 . "<br />";
}

为什么我的代码不计算可能的组合?

喜欢:

echo $result = 4 + 4;

8

4

3 回答 3

2

点 (".") 是 PHP 中字符串的连接运算符。动态类型化使所有这些成为字符串。实际上你得到相同的:

echo $result = "4 + 4 <br />";

如上一个答案中所述使用 eval 。

foreach($operators as $key => $opp){
    echo $result = eval("echo 4 $opp 4;") . "<br />"; // eval should contain valid code
}
于 2013-10-19T19:06:46.380 回答
2

您可以使用一些匿名函数来避免 eval,需要 5.3+

$operators = array(
    "+" => function($l,$r) { return $l + $r; },
    "-" => function($l,$r) { return $l - $r; },
    "*" => function($l,$r) { return $l * $r; },
    "/" => function($l,$r) { return $l / $r; },
);

foreach($operators as $key => $opp){
    //echo "key: $key, opperator: $opp <br />";
    echo $result = $opp(4,4). "<br />";
}
于 2013-10-19T19:17:15.567 回答
1

因为你只是在用字符串做一些事情。他们不被视为操作员。

你当然可以使用 eval:

$x = eval(4 . $opp . 4 );
echo $x;
于 2013-10-19T19:02:04.223 回答