【问题标题】:PHP Undefined index of array. Why?PHP 未定义的数组索引。为什么?
【发布时间】:2012-06-01 06:43:02
【问题描述】:

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

// 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]);
  • 这给了我同样的结果。

标签: php arrays


【解决方案1】:

我认为,您使用的是调试扩展,因此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-&gt;{'75'} 达到“75”。请看:pastebin.com/nTbGscD5
  • 所以,你必须使用 get_object_vars();
  • 成功了,谢谢。这很奇怪,因为我在 $items 上使用了 array_keys 并将其转换为数组并且它起作用了。
  • +1 很棒的研究 @TufanBarışYıldırım - 感谢您挖掘关于将对象转换为数组的花絮。很好地解释了一切。
【解决方案2】:

投射到数组不是这样工作的。

请看这里:get_object_vars() vs. cast to array

这里:http://www.php.net/manual/en/language.types.array.php#language.types.array.casting

块引用 “如果将对象转换为数组,则结果是一个数组,其元素是对象的属性。键是成员变量名称,但有一些值得注意的例外:整数属性不可访问;私有变量的类名前面加上变量名;受保护的变量在变量名前附加一个“*”。这些附加值的两边都有空字节。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-15
    • 2011-08-15
    • 2013-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-05
    • 1970-01-01
    相关资源
    最近更新 更多