【问题标题】:Using the ternary operator in PHP在 PHP 中使用三元运算符
【发布时间】:2010-07-06 10:36:50
【问题描述】:

如果来自数据库查询的布尔表字段为真,我试图打印出 yes,如果它为假,则打印 no。

我正在这样做:

echo "<td>"{$row['paid'] ? 'Yes' : 'No'";}</td>";

为什么不正确?

【问题讨论】:

    标签: php sql


    【解决方案1】:
    echo "<td>".(($row['paid']) ? 'Yes' : 'No')."</td>"; 
    

    就个人而言,我从不回显 HTML,所以我会这样做:

    <td><?=(($row['paid']) ? 'Yes' : 'No')?></td>
    

    不过只是个人喜好而已..

    【讨论】:

      【解决方案2】:
      echo "<td>".(($row['paid']) ? 'Yes' : 'No')."</td>"; 
      

      【讨论】:

      • 显然你先回答了:)
      【解决方案3】:

      其他人已经纠正了你的错误,但我想你可能想知道原因。

      您对三元的使用实际上并不是问题,而是您将它与其他东西连接起来的方式。

      Echo 是一个接受一个变量的函数;一个字符串。实际上是这样的(尽管人们倾向于去掉括号):

      echo(SomeString);
      

      在您的情况下, SomeString 需要是“”,后跟三元的结果,然后是“”。那是三个字符串,需要将它们粘在一起成为一个字符串,以便您可以“回显()”它们。

      这称为串联。在 PHP 中,这是使用点完成的:

      "<td>" . (($row['paid']) ? 'Yes' : 'No') . "</td>"
      

      可以像这样放在 echo() 中:

      echo("<td>" . (($row['paid']) ? 'Yes' : 'No') . "</td>");
      

      或者,您可以使用一个将多个字符串作为参数的函数来跳过串联。 Sprintf() 可以为您做到这一点。它需要一个“格式”字符串(基本上是一个模板)和任意数量的变量字符串(或数字,等等)。使用 %s 符号指定需要插入字符串的位置。

      sprintf("<td>%s</td>",(($row['paid']) ? 'Yes' : 'No'));
      

      世界现在是你的牡蛎。

      【讨论】:

        【解决方案4】:

        参考this

        echo "<td>".(($row['paid']) ? 'Yes' : 'No')."</td>"; 
        

        【讨论】:

          【解决方案5】:

          因为 echo 需要很多参数,所以应该使用逗号而不是字符串连接,这需要更多的处理和内存:

          echo "&lt;td&gt;", (($row['paid']) ? 'Yes' : 'No'), "&lt;/td&gt;";

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2017-08-21
            • 2014-12-19
            • 1970-01-01
            • 2013-10-16
            • 2017-07-06
            • 1970-01-01
            • 2015-04-27
            • 2013-07-06
            相关资源
            最近更新 更多