首页 > 后端开发 > php教程 > 如何在 PHP 中访问具有无效或整数名称的对象属性?

如何在 PHP 中访问具有无效或整数名称的对象属性?

Patricia Arquette
发布: 2024-12-21 19:25:21
原创
1010 人浏览过

How to Access Object Properties with Invalid or Integer Names in PHP?

如何访问具有整数或无效属性名称等名称的对象属性?

PHP 中的 JSON 解码通常会生成对象具有无效名称的属性。这种不一致使得使用标准对象语法访问这些属性变得困难。

使用有效名称访问属性

可以使用点表示法访问具有有效变量名称的属性:

$data = '{ "name": "John Doe" }';
$obj = json_decode($data);
echo $obj->name; // Output: John Doe
登录后复制

访问无效属性名称

使用整数或其他无效名称访问属性并不那么简单。 PHP 有一些可能导致错误的怪癖:

  • PHP 7.2 及更高版本允许使用大括号语法访问数字属性:
$data = '{ "42": "The Answer" }';
$obj = json_decode($data);
echo $obj->{'42'}; // Output: The Answer
登录后复制
  • 但是,对于全数字属性名称,这种语法仍然失败:
$data = '{ "123": "Three Digits" }';
$obj = json_decode($data);
echo $obj->{'123'}; // Error: syntax error
登录后复制
  • 当对象不是从数组派生时,上述规则会出现异常:
$obj = new stdClass;
$obj->{'123'} = 'Three Digits';
echo $obj->{'123'}; // Output: Three Digits
登录后复制

实用解决方案

要访问具有无效名称的属性,请考虑这些选项:

  • 手动转换为数组:
$obj = json_decode($data);
$arr = (array) $obj->highlighting;
$value = $arr['448364']['Data']['0'];
登录后复制
  • 递归数组转换:
function recursive_cast_to_array($obj) {
    $arr = (array) $obj;
    foreach ($arr as &$value) {
        if (is_object($value)) {
            $value = recursive_cast_to_array($value);
        }
    }
    return $arr;
}

$arr = recursive_cast_to_array($obj);
$value = $arr['highlighting']['448364']['Data']['0'];
登录后复制
  • 使用 JSON 函数:
$arr = json_decode(json_encode($obj), true);
$value = $arr['highlighting']['448364']['Data']['0'];
登录后复制

请注意,JSON 函数需要 UTF-8所有字符串的编码。

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板