2014-02-25 124 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;