检查是否存在数组键

时间:2014-02-25 02:55:45

标签: php json

我有一个由 json_decode()生成的多维数组。 json是动态生成的,这意味着一些键将随机出现。

我想避免 Undefined index:通知,所以我在这样的函数中封装了对数组的调用:

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

然后我调用数据:

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

但我仍然会收到未定义索引:baz 通知。有什么建议吗?

3 个答案:

答案 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)

在将{p}传递给$json_array['foo']['bar']['baz']之前,

isset()在将其作为参数传递时失败。那是你的问题。