php Как работает булева алгебра? - PullRequest
0 голосов
/ 14 сентября 2018

Я хочу знать, как работает булева алгебра

и почему это произошло ??

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;

1 Ответ

0 голосов
/ 14 сентября 2018

Когда вы пишете

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;
...