我不确定我所做的是根本错误的,还是我刚刚度过了漫长的一天,错过了一些明显的东西。。。
我正在动态设置数组值,如下所示:
$criteria = array(
'is_blue' => get_color($color_1) == ('Dark Blue' OR 'Light Blue') ? TRUE : FALSE,
'is_red' => get_color($color_2) == ('Dark Red' OR 'Light Red') ? TRUE : FALSE
);
当我尝试以下行时,它自己运行:
echo get_color($color_1);
我得到Dark Green
。因此,您希望它在$criteria['is_blue']
中评估为FALSE
。
但-$criteria['is_blue']
就是TRUE
。
为什么会这样?我是不是误解了三元运算符?
谢谢!
您正确使用了三元运算符,但if
部分格式不正确。
您实际上是在测试get_color($color_1)
是否等于true
,因为'Dark Blue' OR 'Light Blue'
等于true
。
您需要独立测试每个值,如下所示:
$criteria = array(
'is_blue' => get_color($color_1) == 'Dark Blue' OR get_color($color_1) == 'Light Blue' ? true : false,
'is_red' => get_color($color_2) == 'Dark Red' OR get_color($color_2) == 'Light Red' ? true : false
);
您的问题在于("深蓝色"或"浅蓝色")部分。您可以将其重写为使用in_array。。。
'is_blue' => in_array(get_color($color_1), array(('Dark Blue','Light Blue'))
此外,您不需要三进制来返回true
或false
,因为in_array
已经自然返回了。
http://www.php.net/in_array
问题是("深蓝色"或"浅蓝色")是一个布尔值(true或false)
您需要使用两次等式:
$criteria = array(
'is_blue' => get_color($color_1) == 'Dark Blue' OR get_color($color_1) == 'Light Blue' ? TRUE : FALSE,
'is_red' => get_color($color_2) == 'Dark Red' OR get_color($color_2) == 'Light Red' ? TRUE : FALSE
);
在这种情况下,三元运算符也是多余的,您可以使用:
$criteria = array(
'is_blue' => get_color($color_1) == 'Dark Blue' OR get_color($color_1) == 'Light Blue',
'is_red' => get_color($color_2) == 'Dark Red' OR get_color($color_2) == 'Light Red'
);
$criterial['is_blue']和$criterias['is_red']将具有所需的布尔值。
我希望我帮过忙!
试试这个:
$criteria = array(
'is_blue' => (get_color($color_1) == 'Dark Blue' OR get_color($color_1) == 'Light Blue') ? TRUE : FALSE,
'is_red' => (get_color($color_2) == 'Dark Red' OR get_color($color_2) == 'Light Red') ? TRUE : FALSE
);
if中的每个比较都需要是独立的