Php 检查数组中对象的属性是否存在

Php 检查数组中对象的属性是否存在,php,Php,我得到了JSON,它将多个对象作为一个数组的值 我需要检测JSON中的“Error”属性是否返回,但如果Error属性不存在,我不希望返回错误 这是我得到的解码JSON。JSON可以像这样返回,但它可能不会: JSON 我的PHP $data = json_decode($json); print_r($data); 返回: Array ( [0] => stdClass Object ( [Error] => 1050

我得到了JSON,它将多个对象作为一个数组的值

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

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

JSON

我的PHP

$data = json_decode($json); 
print_r($data); 
返回:

Array
(
    [0] => stdClass Object
        (
            [Error] => 1050
        )

)

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

array_key_exists("error", $jsonArray)

类似的问题似乎也存在。

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

这意味着如果您执行了
$arr=json\u decode($json,true)
,那么您将使用
$arr[0]['error']
访问错误,因为json将始终将对象解码为关联数组

这是一个关于JSON和PHP的变异和混淆的可爱的例子,您可能从PHP中的关联数组开始,将其转换为JSON,然后返回并丢失关联数组。只是一些需要注意的东西

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

至于测试该属性是否存在,您可以使用:

现在,我真的很讨厌在任何地方使用isset,所以我有一个实用函数:

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;
}
这意味着在我的代码中,我会:

if(($error = getProperty($arr[0], 'Error')) === false) {
    // process $error
}

。。。但事实证明,在大多数情况下,当未初始化的值不存在时,总是希望为它们提供默认值。(该函数非常大,因为它也适用于对象和数组)

从技术上讲,您可以将对象强制转换为数组并使用array\u key\u exists()。这不是最优雅的解决方案,但会奏效

$json = '[{"Error":"1050"}]';

$j = json_decode($json);


if (array_key_exists(0, $j)) {

    if (array_key_exists('Error', (array)$j[0])) {
        // It exists
    }
}

到目前为止,您是否尝试过任何代码示例?这是一个PHP问题,因此我们假设数据是JSON,但在PHPi中访问。我已经测试了太多已删除的内容,我将重新检查。Lee抱歉是的,这是json解码。我不明白发生了什么。好的,您是否尝试了
$arr[0]->错误
?数组密钥存在(“错误”,$data);这将返回Nothing变量$data引用数组中的第一个对象(索引0)吗$jsonArray[0]应该返回stdClass对象。您需要将对象强制转换为数组。但这样,JSON可能不会返回此错误属性,我返回通知:未定义属性:stdClass::$Error-我只需要检查它是否存在,但是如果我手动将该属性引用为Error,如果它不存在,我将返回一个错误。
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;
}
if(($error = getProperty($arr[0], 'Error')) === false) {
    // process $error
}
$json = '[{"Error":"1050"}]';

$j = json_decode($json);


if (array_key_exists(0, $j)) {

    if (array_key_exists('Error', (array)$j[0])) {
        // It exists
    }
}