【问题标题】:How to do an || statement inside a ternary?怎么办 ||三元内的语句?
【发布时间】:2011-08-12 15:08:59
【问题描述】:

我现在拥有的是:

$somevar = ($progress_date != ('0000-00-00 00:00:00' || '//'))?$progress_date:'NA';

而且它永远不会吐出 $progress_date。默认情况下总是打印“NA”。

这样做并使用 less () 来分隔事物

$somevar = ($progress_date != '0000-00-00 00:00:00' || '//')?$progress_date:'NA';

使得 $progress_date 总是吐出,即使日期设置为 0 的字符串。

有没有办法使用三元语句来捕获空白日期和设置为 0 的日期,以便打印出“NA”?

【问题讨论】:

  • 使用正确的 if 语句。复杂的三元语句是通往疯狂之路!

标签: php ternary-operator


【解决方案1】:

看起来你真正想要的是&& 的一对条件。

$somevar = ($progress_date != '0000-00-00 00:00:00' && $progress_date != '//')?$progress_date:'NA';

每个布尔比较都需要有两个方面,所以你不能这样做:

// Won't do what you expect
$somevar = $progress_date != ('thing1' || 'thing2') ? : ;

而是对双方进行全面比较。大声朗读,这很有意义:进度日期不等于 thing1,进度日期也不等于 thing2

$somevar = $progress_date != "thing1" && $progress_date != "thing2" ? : ;

【讨论】:

  • 感谢您不仅提供有效的答案,还感谢您向我解释。我现在明白为什么它以前不起作用了。
【解决方案2】:
$somevar = (!in_array($progress_date, array('0000-00-00 00:00:00','//')) ? $progress_date : 'NA';

【讨论】:

    【解决方案3】:

    您没有正确使用 or 。

    $somevar = ($progress_date != '0000-00-00 00:00:00' && $progress_date !='//') ? $progress_date:'NA';
    

    【讨论】:

      【解决方案4】:

      我觉得应该是的

      ($progress_date != '0000-00-00 00:00:00' && $progress_date !='//')
      

      || 不能按预期使用,因为它总是计算为布尔值。这样$progress_date != ('0000-00-00 00:00:00' || '//') 就相当于:

      $temp = '0000-00-00 00:00:00' || '//'; //gives true
      $progress_date != $temp;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-05-02
        • 2010-12-22
        • 2022-06-11
        • 1970-01-01
        • 1970-01-01
        • 2011-08-26
        • 1970-01-01
        • 2014-12-15
        相关资源
        最近更新 更多