PHP三元运算符误解?

时间:2013-12-13 18:16:55

标签: php ternary-operator

我不确定我所做的事情是否从根本上是错误的,或者我是否只是度过了漫长的一天而且错过了一些显而易见的事情......

我正在动态设置数组值:

$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

这是为什么?我误解了三元运算符吗?

谢谢!

4 个答案:

答案 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'))

另外,您没有三元返回truefalse,因为in_array已经自然返回了这些内容。

http://www.php.net/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
);

每个比较如果需要独立