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
,或通过
[]