首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检查数组内对象的属性是否存在

问检查数组内对象的属性是否存在
EN

Stack Overflow用户
提问于 2017-07-13 05:56:09
回答 4查看 1.3K关注 0票数 0

我返回了JSON,它将多个对象作为数组的值。

我需要检测JSON中的" Error“属性是否返回,但如果error属性不存在,我不希望返回错误。

这是我得到的经过解码的JSON。JSON可以像这样返回,但它可能不会:

JSON

代码语言:javascript
复制
[{"Error":"1050"}]

我的PHP

代码语言:javascript
复制
$data = json_decode($json); 
print_r($data); 

它返回:

代码语言:javascript
复制
Array
(
    [0] => stdClass Object
        (
            [Error] => 1050
        )

)
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-07-13 06:08:03

我认为对于您的特定示例,您可以使用$arr[0]->Error访问错误,但json_decode中的assoc选项意味着它取决于您要求json_decode执行的操作。

这意味着如果您使用$arr = json_decode($json, true),那么您将使用$arr[0]['Error']访问错误,因为JSON将始终将对象解码为关联数组。

这是一个关于JSON和PHP的变化和混淆的有趣例子,您可以从PHP中的关联数组开始,将其转换为JSON,然后再将其转换为JSON,然后丢失关联数组。只是一些需要注意的东西。

在PHP中,可以使用[方括号访问数组,使用]访问对象属性,使用箭头->访问对象属性。它们不能像JavaScript中的括号和点符号那样互换。所以你需要时刻注意你的数据结构是对象还是关联数组。

至于测试属性是否存在,可以使用isset

代码语言:javascript
复制
if(isset($arr[0]->Error)) {
  // handle error
}

现在,我真的讨厌到处使用isset,所以我有一个实用函数:

代码语言:javascript
复制
function getProperty($object, $propertyName, $defaultValue = false)
{
    $returnValue = $defaultValue;

    if (!empty($object)) {
        if (is_array($object)) {
            if (isset($object[$propertyName])) {
                $returnValue = $object[$propertyName];
            }
        } else {
            if (isset($object->$propertyName)) {
                $returnValue = $object->$propertyName;
            }
        }
    }

    return $returnValue;
}

这意味着在我的代码中,我做到了:

代码语言:javascript
复制
if(($error = getProperty($arr[0], 'Error')) === false) {
    // process $error
}

..。但这是因为在大多数情况下,当未初始化的值不存在时,总是希望它们被赋予默认值。(该函数之所以如此强大,是因为它也适用于对象和数组)

票数 2
EN

Stack Overflow用户

发布于 2017-07-13 06:04:10

您可以将json_decode与包含返回的JSON的变量一起使用,然后使用array_key_exists检查对象是否包含错误键。

代码语言:javascript
复制
array_key_exists("error", $jsonArray)

看起来和How to check if an array element exists?类似的问题。

票数 0
EN

Stack Overflow用户

发布于 2017-07-13 06:27:10

从技术上讲,您可以将对象转换为数组并使用array_key_exists()。这不是最优雅的解决方案,但它会起作用的。

代码语言:javascript
复制
$json = '[{"Error":"1050"}]';

$j = json_decode($json);


if (array_key_exists(0, $j)) {

    if (array_key_exists('Error', (array)$j[0])) {
        // It exists
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45068146

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档