2011-08-12 50 views
1

我有现在的问题是:如何做||三元组内的声明?

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

,并没有以往任何时候都吐了出来$ progress_date。它默认总是打印'NA'。

这样做的,使用更少的()来分隔东西

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

使得它如此$ progress_date总是吐出来,甚至当日期设置为0的字符串。

是否有利用三元语句她俩都设置为0,空白的日期,日期是“NA”被打印出来的方法吗?

+0

使用一个适当的if语句。复杂的三元陈述是通向疯狂的道路! – vascowhite

回答

2

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

$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和进度日期也并不等于

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

不仅谢谢你的回答,还能向我解释。我现在明白为什么它以前不工作。 – mountaingirl

+0

@velvetpuzzle乐于帮助。 –

2
$somevar = (!in_array($progress_date, array('0000-00-00 00:00:00','//')) ? $progress_date : 'NA'; 
0

你不使用或适当地thing2。

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

我觉得应该是

($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; 
+0

'$ temp'实际上是'true' – NullUserException