首页 >后端开发 >php教程 >如何使用'json_decode()”在 PHP 中访问具有无效或数字属性名称的对象?

如何使用'json_decode()”在 PHP 中访问具有无效或数字属性名称的对象?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-18 08:16:15761浏览

How Can I Access Objects with Invalid or Numeric Property Names in PHP Using `json_decode()`?

使用 PHP 访问具有无效或数字属性名称的对象

尝试使用 PHP 中的 json_decode() 函数解析 JSON 数据时,您可能会在访问名称为整数的属性时遇到困难,或者无法遵守有效的变量命名约定。此行为源于 PHP 在处理具有此类属性的对象时的固有限制。

限制和怪癖

  1. 数字属性名称:
    尝试直接访问具有数字名称的属性(没有任何前面的 $ 符号)将导致语法错误。
  2. 大括号语法:
    可以使用大括号语法访问名称无效的属性,但仅限于不完全由数字组成的名称。
  3. 对象的起源:
    直接从数组创建的对象仍然可以使用大括号访问数字属性语法,即使它们在技术上无效。

解决方案

解决方案#1:手动类型转换

手动将对象转换为数组以访问无效的属性名称:

$a = array('123' => '123', '123foo' => '123foo');
$o = (object) $a;
$a = (array) $o;
echo $a['123']; // OK!

解决方案#2:核选项

使用递归函数将对象转换为数组:

function recursive_cast_to_array($o) {
    $a = (array) $o;
    foreach ($a as &$value) {
        if (is_object($value)) {
            $value = recursive_cast_to_array($value);
        }
    }

    return $a;
}

$arr = recursive_cast_to_array($myVar);
$value = $arr['highlighting']['448364']['Data']['0'];

解决方案#3:JSON函数

利用内置 JSON 函数递归转换为数组:

$arr = json_decode(json_encode($myVar), true);
$value = $arr['highlighting']['448364']['Data']['0'];

在选择最适合您要求的解决方案之前,请务必考虑每种解决方案的缺点。例如,解决方案 #2 和 #3 执行不必要的数组转换,而解决方案 #3 还要求字符串属性以 UTF-8 进行编码。

以上是如何使用'json_decode()”在 PHP 中访问具有无效或数字属性名称的对象?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn