我不确定我所做的事情是否从根本上是错误的,或者我是否只是度过了漫长的一天而且错过了一些显而易见的事情......
我正在动态设置数组值:
$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
。因此,您希望它在FALSE
中评估为$criteria['is_blue']
。
但是 - $criteria['is_blue']
是TRUE
。
这是为什么?我误解了三元运算符吗?
谢谢!
答案 0 :(得分:3)
您正在使用三元运算符,但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
);
答案 1 :(得分:2)
你的问题是('深蓝色'或'浅蓝色')部分。您可以重写此内容以使用in_array ...
'is_blue' => in_array(get_color($color_1), array(('Dark Blue','Light Blue'))
另外,您没有三元返回true
或false
,因为in_array
已经自然返回了这些内容。
答案 2 :(得分:1)
你遇到的问题是('深蓝'或'浅蓝')是一个布尔值(真或假)
您需要使用两次相等:
$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'
);
$ criteria ['is_blue']和$ criteria ['is_red']将具有您想要的布尔值。
我希望我有所帮助!
答案 3 :(得分:0)
试试这个:
$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
);
每个比较如果需要独立