Php 三元运算符误解?

Php 三元运算符误解?,php,ternary-operator,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 : FAL

我不确定我所做的是根本错误的,还是我刚刚度过了漫长的一天,错过了一些显而易见的事情

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

$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);
我得到了
深绿色
。因此,您希望它在
$criteria['is_blue']
中评估为
FALSE

但是-
$criteria['is_blue']
真的

为什么会这样?我是不是误解了三元运算符


谢谢

您正确使用了三元运算符,但
if
部分格式不正确

您实际上是在测试
get\u color($color\u 1)
是否等于
true
,因为
的“深蓝色”或“浅蓝色”
等于
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
);

您正确使用了三元运算符,但
if
部分格式不正确

您实际上是在测试
get\u color($color\u 1)
是否等于
true
,因为
的“深蓝色”或“浅蓝色”
等于
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
);
试试这个:

$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中的每个比较都需要独立进行

尝试以下方法:

$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中的每个比较都需要是独立的

您的问题在于(“深蓝色”或“浅蓝色”)部分。你可以重写它以在数组中使用

'is_blue' => in_array(get_color($color_1), array(('Dark Blue','Light Blue'))
此外,您不需要返回
true
false
,因为这是由_数组中的
自然返回的

您的问题在于(“深蓝色”或“浅蓝色”)部件。你可以重写它以在数组中使用

'is_blue' => in_array(get_color($color_1), array(('Dark Blue','Light Blue'))
此外,您不需要返回
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'
);
$criteria['is_blue']和$criteria['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
);
此外,三值运算符是冗余的。在这种情况下,您可以使用:

$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']将具有所需的布尔值


我希望我能帮上忙

啊哈-明白了。遗憾的是,没有比PHP更优雅的输入方式了,不过没关系——谢谢。请看@Cole的答案。更具可读性、优雅性和可扩展性:)这种技术绝对不可取。这不仅冗长,而且可能会迫使php多次使用相同的参数调用相同的函数。这个答案专门针对OP的原始代码。有关其他方法,请参阅或.Aha-明白。遗憾的是,没有比PHP更优雅的输入方式了,不过没关系——谢谢。请看@Cole的答案。更具可读性、优雅性和可扩展性:)这种技术绝对不可取。这不仅冗长,而且可能会迫使php多次使用相同的参数调用相同的函数。这个答案专门针对OP的原始代码。有关其他方法,请参阅或。