我有一个由 json_decode()生成的多维数组。 json是动态生成的,这意味着一些键将随机出现。
我想避免 Undefined index:通知,所以我在这样的函数中封装了对数组的调用:
function exists($value) {
if (isset($value)) {
return $value;
}
}
然后我调用数据:
$something = exists($json_array['foo']['bar']['baz']);
但我仍然会收到未定义索引:baz 通知。有什么建议吗?
答案 0 :(得分:2)
看起来你是PHP的新手,所以我会给出比平常更长的答案。
$something = exists($json_array['foo']['bar']['baz']);
这相当于你写的:
$baz = $json_array['foo']['bar']['baz'];
$something = exists($baz);
您可能已经注意到,这意味着$json_array['foo']['bar']['baz']
在传递给exists()
之前会被评估。这是未定义索引的来源。
正确的习语更像是这样:
$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;
答案 1 :(得分:1)
您必须逐个链接exists
个调用,因为您在将数组发送到exists函数之前尝试取消引用该数组。
有关详细信息,请参阅此问题:Check if a "run-time" multidimensional array key exists
答案 2 :(得分:0)
$json_array['foo']['bar']['baz']
之前, isset()
在将其作为参数传递时失败。那是你的问题。