2017-08-08 141 views
1

我是PHP的新手,我努力想知道爲什麼我的代碼在echo顯示0時不工作。代碼適用於其他任何情況,只要隨機操作符選擇0它輸出0 Negative,當我有它顯示爲Zero。我不知道爲什麼這樣做,我會很感激任何指導。PHP:顯示0到正確的輸出

$randomNumber = rand(-5, 5); 
$var = $randomNumber; 
echo $randomNumber; 
echo $integerValue = (($var === 0) ? " Zero" : ($var <=-1) ? " Negative" : (($var >=1) ? " Positive" : " Not Positive or Zero")); 
+2

如果只有2個結果,最好使用三元運算符。爲了可讀性和更容易的故障排除,我會考慮使用'if' /'else'。 – Rasclatt

回答

4

的問題是由於PHP三元o操作結束時切優先級,逆向運作,相較於大多數其他語言: Understanding nested PHP ternary operator

試試這個最後一行:

echo $integerValue = (($var === 0) ? " Zero" : (($var <=-1) 
       ? " Negative" : (($var >=1) 
       ? " Positive" : " Not Positive or Zero"))); 
0

您不想回顯任務。您需要分配值,然後回顯它。嘗試改變最後一行

$integerValue = (($var === 0) ? " Zero" : ($var <=-1) ? " Negative" : (($var >=1) ? " Positive" : " Not Positive or Zero")); 

,然後加入

echo $integerValue; 
+0

我試過這個,它沒有改變'0'的輸出。但是,謝謝你的提示,改變回聲 – madoreo

+0

哦,對不起,我錯過了你原來的問題。你不想讓-1和1之間的任何東西迴歸爲零嗎?像這樣:'$ integerValue =(($ var < 1 && $var > -1)?「Zero」:($ var <= - 1)?「Negative」:(($ var> = 1)?「Positive」:「Not Positive or零「));' – iavery

+0

雖然不正常,分配將發生在echo語句之前。所以php會分配'$ integerValue',然後迴應任何值。這是一個快速演示:https://3v4l.org/CaemK。這與'while($ row = mysqli_fetch ...)'在該行中工作的方式類似,將在評估任何表達式之前分配。 –

0

你缺少一個括號行:

<?php 
$randomNumber = rand(-5, 5); 
$var = $randomNumber; 
echo $randomNumber; 
echo $integerValue = (($var === 0) ? " Zero" : (($var <=-1) ? " Negative" : (($var >=1) ? " Positive" : " Not Positive or Zero"))); 

說明:

(
    ($var === 0) ? " Zero" : (
     ($var <=-1) ? " Negative" : (
      ($var >=1) ? " Positive" : " Not Positive or Zero" 
     ) 
    ) 
) 
0

您已經有了另一種答案,解釋爲什麼你沒有得到你所期望的結果,只是僅供參考,您的多元三元表達式可以稍微簡化一下。

echo $var ? $var > 0 ? ' Positive' : ' Negative' : ' Zero'; 

$var將評估爲false,如果它是零,所以沒有必要明確地把它比作零,並最終"Not Positive or Zero"是不是真的一個可能的結果,作爲rand結果將是一個整數,根據定義,它可以是正數,負數或零。

括號不是必需的,但它們可能會使表達更明顯。

echo $var ? ($var > 0 ? ' Positive' : ' Negative') : ' Zero';