【问题标题】:Checking if an array key exists检查数组键是否存在
【发布时间】:2014-02-25 02:55:45
【问题描述】:

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

我想避免 未定义索引: 通知,所以我将对数组的调用封装在这样的函数中:

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

然后我调用数据:

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

但我仍然收到 Undefined index: baz 通知。有什么建议吗?

【问题讨论】:

标签: php json


【解决方案1】:

看来你是 PH​​P 新手,所以我会给出一个比平常长一点的答案。

$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;

【讨论】:

    【解决方案2】:

    您必须一一链接exists 调用,因为您试图在将数组发送到exists 函数之前取消对数组的引用。

    有关更多信息,请参阅此问题:Check if a "run-time" multidimensional array key exists

    【讨论】:

      【解决方案3】:

      $json_array['foo']['bar']['baz'] 在传递给isset() 之前作为参数传递时失败。那是你的问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-09-05
        • 2016-08-28
        • 2016-08-07
        • 2012-10-21
        • 2020-04-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多