php - 从对象转换时无法通过数字关联键访问数组元素

标签 php arrays

<分区>

当您将带有数字字段的对象(参见 $obj)转换为数组时,您无法访问它的元素

$obj = new stdClass();
$obj->{"325890"} = "test";

$arr = (Array) $obj;

$key = array_keys($arr)[0];

var_dump($arr); // array (size=1) '325890' => string 'test' (length=4)
var_dump($key); // string '325890' (length=6)

var_dump($arr["325890"]); // null
var_dump($arr[325890]); // null
var_dump($arr[$key]); // null

$arr = unserialize(serialize($arr)); // this fixes that

var_dump($arr["325890"]); // string 'test' (length=4);

当您将数据分配给同一元素时,还会发生一些奇怪的事情:

$arr = (Array) $obj;
$arr[325890] = "test"; // or $arr["325890"] = "test";

var_dump($arr);

array (size=2)
'325890' => string 'test' (length=4)
325890 => string 'test' (length=4)

这是错误还是记录在案的行为?我正在使用 PHP 7.1.2

我在尝试使用数字键访问 JSON 元素时发现了一个小错误。

$items = Array(
   "100" => "item",
   "200" => "item",
   "300" => "item",
   "400" => "item",
);

$json = json_encode($items);

$items = (Array) json_decode($json);

var_dump($items[100]); // null

最佳答案

文档中提到“整数属性不可访问” http://php.net/manual/en/language.types.array.php

来自文档

如果将对象转换为数组,则结果是一个数组,其元素是对象的属性。键是成员变量名,有几个值得注意的异常(exception):整数属性不可访问;私有(private)变量在变量名前加上类名; protected 变量在变量名前加上“*”。这些前置值的两边都有空字节。这可能会导致一些意外行为:

关于php - 从对象转换时无法通过数字关联键访问数组元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42973835/

相关文章:

php - Mysql/PHP错误: not displaying $username

java - 为什么我的 ListView 呈现重复的项目?

java - 使用多个线程访问一个数组,但只能读取或只能写入

javascript - Jquery 可放入数组

php - 如何在 View (yii2)中创建具有不同形式的页面?

php - 无法插入数据库(steamauth)

javascript - 当我使用自动刷新时,Php mysql 仅返回最后一行

java - 在java中使用system.out.println()创建一个棋盘

c - 打印 '.' 之后的每个字母,例如如果我输入 a..bcde..fg..h,程序将打印 bfh

php trait 使用另一个 trait