我有这段代码:
$object = new StdClass();
$object->{'1'} = 'test_1';
$object->a = 'test_a';
$array = (array) $object;
var_dump($array)
工作正常,返回
array (size=2)
'1' => string 'test_1' (length=6)
'a' => string 'test_a' (length=6)
然而,
var_dump($array[1]); //returns null
var_dump($array['1']); //returns null
var_dump($array["1"]); //returns null
有人可以解释这种行为吗? 为什么我无法访问我能看到的属性?
答案 0 :(得分:1)
你的结果很好。正如它在PHP中所期望的那样 - 因为数字的字符串键实际上是will be converted to integers - 在数组的定义内或在尝试取消引用它们时。这不是你应该如何使用数组 - 即转换对象。是的 - 这种转换是获取字符串数字键的一种方式 - 但后果是您自己的。
您可以通过以下方式提取此类值:
function getValue($array, $key)
{
foreach($array as $k=>$value)
{
if($k===$key)
{
return $value;
}
}
return null;
}
$object = new StdClass();
$object->{'1'} = 'test_1';
$object->a = 'test_a';
$array = (array) $object;
var_dump(getValue($array, '1'), getValue($array, 1));
- 但我绝对不建议以这种方式使用数组。
要说更多 - PHP中有ArrayAccess
这样的东西允许你为数据结构实现自定义逻辑 - 并且使用它们,你将能够以正常方式克服这个限制。 / p>