2013-12-13 74 views
0

我不知道我在做什麼是根本錯誤還是我剛喝了漫長的一天,我失去了一些東西明顯...PHP三元運算符誤解?

我設置陣列值動態像這樣:

$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

這是爲什麼?我誤解了三元操作符?

謝謝!

+0

可能的重複[看看一個變量是否等於列表php中的任何其他變量](http://stackoverflow.com/questions/15775565/see-if-a-variable-equals-any-other-variables-in -a-list-php) –

回答

3

您正在使用三元運算符,但if部分格式錯誤。

由於'Dark Blue' OR 'Light Blue'等於true,所以您基本上測試get_color($color_1)等於true

你需要independantly測試每一個值,就像這樣:

$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 
); 
+0

啊哈 - 明白了。很遺憾,在PHP中沒有更好的輸入方式,但沒關係 - 謝謝。 – Jack

+0

查看@Cole的答案。更可讀,優雅和可擴展性:) – showdev

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 
); 

中如果需要獨立

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

+0

+1大量使用'in_array'。 – showdev

1

,你必須是(「深藍」或「淺藍」)是一個布爾值(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']將具有所需的布爾值。

我希望我能幫上忙!