2014-02-25 167 views
0

我有一個由生成的多維數組json_decode()。 json是動態生成的,這意味着一些密鑰會隨機出現。檢查數組鍵是否存在

我想避免未定義指數:通知,所以我封裝在調用數組中這樣的功能:

function exists($value) { 
    if (isset($value)) { 
     return $value; 
    } 
} 

我然後調用數據:

$something = exists($json_array['foo']['bar']['baz']); 

但我仍然收到未定義索引:baz通知。有什麼建議麼?

+0

我選擇'如果(strlen的($值)> 0)'因爲有時數組沒有設置,所以它只是顯示黑色,但在isset它返回true) –

+0

可能的重複[檢查是否存在「運行時」多維數組鍵)(http://stackoverflow.com/questions/6080991/籤如果-A-運行時-多維陣列密鑰-存在) –

回答

0

$json_array['foo']['bar']['baz']失敗,當你把它作爲一個參數,然後再將其傳遞給isset()。那是你的問題。

2

看來你是PHP的新手,所以我會給出比平常更長的回答。

$something = exists($json_array['foo']['bar']['baz']); 

這相當於你寫的:

$baz = $json_array['foo']['bar']['baz']; 
$something = exists($baz); 

正如你可能已經注意到,這意味着之前它傳遞給exists()$json_array['foo']['bar']['baz']進行評估。這是未定義索引的來源。

正確成語會更是這樣的:

$something = NULL; 
if (isset($json_array['foo']['bar']['baz'])) { 
    $something = $json_array['foo']['bar']['baz']; 
} 

以下是也與上述相同的行:

$something = isset($json_array['foo']['bar']['baz']) 
    ? $json_array['foo']['bar']['baz'] 
    : NULL;