PHP三元运算符误解


PHP Ternary Operator Misunderstanding?

我不确定我所做的是根本错误的,还是我刚刚度过了漫长的一天,错过了一些明显的东西。。。

我正在动态设置数组值,如下所示:

$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'))

此外,您不需要三进制来返回truefalse,因为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中的每个比较都需要是独立的