无法访问PHP数组值

时间:2013-11-29 14:22:57

标签: arrays object php-5.4

我有这段代码:

$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

有人可以解释这种行为吗? 为什么我无法访问我能看到的属性?

1 个答案:

答案 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>