Как сделать || заявление внутри троичного? - PullRequest
1 голос
/ 12 августа 2011

Сейчас у меня есть:

$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»?

Ответы [ 4 ]

2 голосов
/ 12 августа 2011
$somevar = (!in_array($progress_date, array('0000-00-00 00:00:00','//')) ? $progress_date : 'NA';
2 голосов
/ 12 августа 2011

Похоже, что вы действительно хотите, это пара условий с &&.

$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') ? : ;

Вместо этого сделайте полное сравнение с обеих сторон. Читайте вслух, это имеет смысл как то, что вам нужно: Дата прогресса не равна вещи1, а дата прогресса также не равна вещи2

$somevar = $progress_date != "thing1" && $progress_date != "thing2" ? : ;
0 голосов
/ 12 августа 2011

Я думаю, что это должно быть

($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 голосов
/ 12 августа 2011

Вы не используете или правильно.

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