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

9

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

// 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

什么?

谢谢。


尝试转换成不同的变量 $new_items = (array) $items; var_dump($new_items[75]); - Aziz
这给了我相同的结果。 - Sylwester Kardziejonek
2个回答

4
我认为您正在使用调试扩展程序,因此var_dump()输出与标准库不同,属性不能是数字,但$obj->{'75'}是可以的。 如果您可以通过$items->{'75'}访问子对象,则具有数字属性。 否则,您可以尝试print_r($items);并查看原始输出,或在get_object_vars()之后检查数组。
    <?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

PHP问题: #45959

请阅读强制类型转换的引用:http://www.php.net/manual/en/language.types.array.php#language.types.array.casting


是的,当$ items仍然是一个对象时,我可以使用$obj->{'75'}访问“75”。请看:http://pastebin.com/nTbGscD5 - Sylwester Kardziejonek
1
所以,你必须使用get_object_vars();。 - Tufan Barış Yıldırım
可以了,谢谢。有点奇怪,因为我在将$items转换为数组后使用array_keys函数,它居然起作用了。 - Sylwester Kardziejonek
+1 @TufanBarışYıldırım 的研究真是太棒了 - 感谢您挖掘出有关将对象转换为数组的小贴士。解释得非常清楚明白。 - Mike B

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接