2017-08-08 105 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';