2012-05-20 28 views
0

不夠強,所以在這裏PHP數組檢查是我的問題:在PHP中存在的索引

我建立一個簡單的數組返回爲JSON,從另一個陣列數據填充它。 $ eventarray可能有指數氣體,或者可能不是,所以我需要檢查現有的氣體指數,如果存在的話,如果不存在默認值,則得到該值。

我該如何做到最優化的方式?

在PHP中再強調一點。

這裏是數組:

$somearr = array(
     "actiontaken"=>sprintf("%s", $eventarray['desc']), 
     "actionname" =>sprintf("%s", $eventarray['name']), 
     "type" =>sprintf("%s", $eventarray['type']), 
     "subtype" =>sprintf("%s", $eventarray['name']), 
     "min" =>sprintf("%s", $eventarray['min']), 
     "gas" =>sprintf("%s", $eventarray['gas']), 
     "playerId"=>$value['p'], 
     "name" =>$value2['name'], 
     "race" =>$value2['race'] 
); 
+0

Fyi,你不需要s printf調用。只需直接使用變量! – ThiefMaster

回答

4

可以使用isset()來檢查元件的情況下(並且不是null):

isset($eventarray['gas']) ? $eventarray['gas'] : 'defaultvalue' 

注:如果null是一個可能的值,其中您不希望使用默認值,您不能使用isset,而必須使用array_key_exists($eventarray, 'gas')

+0

php doc推薦使用array_key_exists來代替。我也曾經使用過isset,但它似乎在某些情況下返回false結果(如果鍵是空的,!!)。 –

+0

是的,正如我所提到的:如果值爲NULL,它將返回false。如果這對他不是問題,'isset()'很好。 – ThiefMaster

+0

感謝不知道php中的語法,它非常類似於我一直使用的C#語法,並且在null上返回false是很好的。 –

1

你可以使用一個三元操作符來檢查它的存在,並設置默認值。

它的工作方式是:(條件)? [如果真]:如果假]

... 
"gas" => (isset($eventarray['gas'])) ? $eventarray['gas'] : 'default', 
0

使用默認值第一初始化您的$ somearr陣列:

$somearr = array(
    'actiontaken' => 'default action', 
    'actionname' => 'default action name', 
    etc..); 

然後遍歷$ eventarray:

foreach($eventarray as $event => $eventval) { 
    $somearr[$event] = $eventval; 
} 
+0

在許多情況下這是一個很好的解決方案,但我建議使用array_merge而不是循環。 '$ output = array_merge($ default_values,$ input);' – Okonomiyaki3000

0

使用ternary operator

"actiontaken"=>sprintf("%s", (isset($eventarray['desc']) && !empty($eventarray['desc'])) ?$eventarray['desc'] : 'Default Value'),