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