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的原始代码。有关其他方法,请参阅或。