Я хочу знать, как работает булева алгебра
а почему это случилось ??
echo 1*1+0*0;
echo "\n";
$part = 1*1+0;
echo $part*0;
echo "\n";
вывод:
1
0
и если у меня есть такой массив
$mx[] = array("",1);
$mx[] = array("*",1);
$mx[] = array("+",0);
$mx[] = array("*",0);
как я могу получить логический результат?
Я пробовал это, но это приведет к ошибкам
function ch($p1,$p2,$prv) {
$ret = null;
if ($prv == null) {
$ret = $p2;
}
if ($prv != null) {
if ($p1 == "*") {
$ret = $prv*$p2;
}
if ($p1 == "+") {
$ret = $prv+$p2;
}
}
return $ret;
}
$prvx = null;
$mx[] = array("",1);
$mx[] = array("*",1);
$mx[] = array("+",0);
$mx[] = array("*",0);
foreach ($mx as $hit) {
$prvx = ch($hit[0],$hit[1],$prvx);
}
echo $prvx;
Когда ты пишешь
echo 1*1+0*0;
PHP использует приоритет оператора решить, как группировать операции. *
имеет более высокий приоритет, чем +
, так что это рассматривается как:
echo (1*1) + (0*0);
что упрощает:
echo 1 + 0;
что дополнительно упрощает:
echo 1;
Но когда вы делаете свой цикл, который вызывает ch
вы не делаете никакой группировки на основе операторов, вы просто выполняете каждую операцию в том порядке, в котором она появляется в $mx
массив. Таким образом, ваши операции эквивалентны:
echo ((1 * 1) + 0) * 0;
что упрощает:
echo (1 + 0) * 0;
что эквивалентно:
echo 1 * 0;
который:
echo 0;
Других решений пока нет …