PHP未定义数组的索引。为什么?

PHP未定义数组的索引。为什么?,php,arrays,Php,Arrays,这是。。。我甚至不知道这是怎么回事 // var_dump of items before object(stdClass)[84] public '75' => object(stdClass)[87] $items = (array) $items; // Casting unserialized stdClass to array var_dump($items); //Result of var dump: array '75' => object(s

这是。。。我甚至不知道这是怎么回事

// var_dump of items before
object(stdClass)[84]
   public '75' => object(stdClass)[87]

$items = (array) $items; // Casting unserialized stdClass to array
var_dump($items);

//Result of var dump:
array
  '75' => 
    object(stdClass)[87]

//Now lets get this item:
var_dump($items[75]); // Error
var_dump($items['75']); // Error
怎么回事


谢谢。

我想,您正在使用调试扩展,因此
var_dump()
输出与标准库不同,属性不能是数字,但
$obj->{'75'}
可以。 如果您可以通过
$items->{'75'}
访问子对象,则您有一个数值属性。 否则,您可以尝试打印($items)并查看原始输出,或在
get\u object\u vars()之后检查数组


对数组进行强制转换不是这样工作的

请看这里:

在这里:

大宗报价 如果将对象转换为数组,则结果是一个数组,其元素是对象的属性。键是成员变量名,但有几个明显的例外:整数属性不可访问;私有变量的类名在变量名前面;受保护变量的变量名在变量名前面有“*”。T这些带前缀的值的两边都有空字节


试着将$code>$new\u items=(array)$items;var\u dump($new\u items[75]);
转换成不同的变量,这会得到相同的结果。是的,当$items仍然是一个对象时,我可以使用
$obj->{'75'}
到达“75”。请看:所以,您必须使用get\u object\u vars();它成功了,谢谢。这很奇怪,因为我在将$items投射到阵列后使用了阵列键,它成功了。+1 Awesome research@TufanBarışYıldırım-感谢你挖掘了关于将对象投射到阵列的趣闻。很好地解释了一切。
    <?php

$items = new stdClass();
$items->{'75'} = new stdClass();
$items->{'75'}->{'85'} = new stdClass();


$items = (array) $items; // Casting unserialized stdClass to array
$items_array = get_object_vars($items); // getting object vars as an array.

var_dump($items["75"]); // Error
var_dump($items['75']); // Error
var_dump($items_array['75']); // Works