【问题标题】:PHP: Displaying zero to the correct outputPHP:在正确的输出中显示零
【发布时间】:2018-01-16 10:27:43
【问题描述】:

我是 PHP 新手,当echo 显示0 时,我很难理解为什么我的代码不起作用。该代码适用于其他所有内容,但是当随机运算符选择0 时,它会输出0 Negative,而我将其显示为Zero。我不知道它为什么会这样做,如果有任何指导,我将不胜感激。

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

【问题讨论】:

  • 如果只有 2 个结果,最好使用三元运算符。为了可读性和更容易的故障排除,我会考虑使用if / else

标签: php


【解决方案1】:

问题是由于 PHP 三元运算符优先级,与大多数其他语言相比,它向后工作: Understanding nested PHP ternary operator

试试最后一行:

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

【讨论】:

    【解决方案2】:

    您缺少括号:

    <?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"
            )
        )
    )
    

    【讨论】:

      【解决方案3】:

      您不想重复分配。您需要分配该值,然后回显它。尝试将最后一行更改为

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

      然后添加一行

      echo $integerValue;
      

      【讨论】:

      • 我试过了,它没有改变'0'的输出。但是,感谢您提供有关更改回声的提示
      • 哦,抱歉,我错过了您遇到的原始问题。您不希望 -1 和 1 之间的任何值返回为零吗?像这样:$integerValue = (($var &lt; 1 &amp;&amp; $var &gt; -1) ? " Zero" : ($var &lt;=-1) ? " Negative" : (($var &gt;=1) ? " Positive" : " Not Positive or Zero") );
      • 虽然不正常,但赋值会发生在 echo 语句之前。所以 php 将分配$integerValue 然后回显任何值。这是一个快速演示:3v4l.org/CaemK。这类似于 while($row = mysqli_fetch...) 在计算任何表达式之前在该行中的工作方式。
      • 我需要输出显示:'0' 零 - 任何低于零的值:-1 负值 - 高于零值的值:2 正值,例如
      • 尝试像这样在嵌套的三元运算符周围添加括号。这将为您提供您正在寻找的结果:$integerValue = (($var === 0) ? " Zero" : (($var &lt;=-1) ? " Negative" : (($var &gt;=1) ? " Positive" : " Not Positive or Zero")));
      【解决方案4】:

      您已经有了另一个答案来解释为什么您没有得到预期的结果,但仅供参考,您的多重三元表达式可以在某种程度上简化。

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

      $var 将评估为 false 如果它为零,因此无需明确将其与零进行比较,最终的 "Not Positive or Zero" 并不是真正可能的结果,因为 rand 的结果将是一个整数,根据定义可以是正数、负数或零。

      括号不是必需的,但它们可以使表达式的作用更加明显。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-02-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-01-17
        相关资源
        最近更新 更多