Arrays 无法访问PHP数组值
我有一段代码:Arrays 无法访问PHP数组值,arrays,object,php-5.4,Arrays,Object,Php 5.4,我有一段代码: $object = new StdClass(); $object->{'1'} = 'test_1'; $object->a = 'test_a'; $array = (array) $object; var\u dump($array)工作正常,返回 array (size=2) '1' => string 'test_1' (length=6) 'a' => string 'test_a' (length=6) 但是, var_dump(
$object = new StdClass();
$object->{'1'} = 'test_1';
$object->a = 'test_a';
$array = (array) $object;
var\u 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
有人能解释一下这种行为吗?
为什么我不能访问一个我能看到的属性呢?你的结果很好。这和PHP中所期望的一样——因为实际上是数字的字符串键——在数组的定义中或在尝试去引用它们的过程中。这不是你应该如何使用数组,也就是说,转换一个对象。是的-这种转换是获取字符串数字键的一种方法-但后果由您自己决定 您可以通过以下方式提取这些值:
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中有一些东西允许您为数据结构实现自定义逻辑,使用它们,您将能够以正常方式克服这一限制。看看这个答案和注释:您能解释一下“不可访问”代表什么吗?既然
var\u dump
显示它,那么foreach也会显示它!这是一个PHP“功能”(也称为bug)。1)我在来这里之前就去过那里,但情况不同,如果只是将数字键转换为整数,我仍然可以得到$array[1]。2) 我知道如何克服这个问题,但我想了解发生了什么,所以我已经解释过,通过“作为数字的字符串键实际上将被转换为整数-在数组的定义中或在尝试去引用它们的过程中”-即PHP将处理“1”
作为数组定义中的1
,或通过[]