【问题标题】:Uninitialized string offset while building array构建数组时未初始化的字符串偏移量
【发布时间】:2012-10-04 15:23:44
【问题描述】:

我从下面介绍的方法中收到以下错误:

注意:未初始化的字符串偏移量:第 30 行的 /path/to/file.php 中的 5 致命错误:无法访问第 30 行的 path/to/file.php 中的空属性

private function parse($xml, $index = '') {
    echo count($xml->children()); //outputs 6
    $count = 0;
    foreach ($xml->children() as $key => $value) {

        $this->$key[$count] = array();
        $count++;

    }

}

任何想法为什么如果我以这种方式构建多维会导致错误?

如果我将作业更改为:

$this->$key = array($count = > array());

这只是在每个循环中重新分配属性。 谢谢 丰富

【问题讨论】:

标签: php multidimensional-array foreach


【解决方案1】:

假设你有一个字符串:

$string = 'abc`;

进行子字符串访问(看起来像数组)将返回字符:

echo $string[2]; # c

或者当你不在索引时你会得到你的错误:

echo $string[3]; # null + warning

所以现在动态访问对象$this 的成员:

$this->$string[2]; # access $this->c

但是这个几乎不坏:

$this->$string[3]; # access $this->null (not possible)

这会给你一个空属性,一个没有名称的属性的致命错误。

这解释了你的代码中发生了什么,你还没有告诉你要做什么,所以我希望这些信息能帮助你继续编写你的解析函数。

【讨论】:

  • 我明白了。所以我正在访问字符串的一部分,或者尝试重新分配字符串的一部分而不是分配新的索引。
  • 您实际上是首先动态地说出属性的名称。由于该属性导致 no-name,因此您会收到致命错误。
  • 我正在尝试动态构建一个多维数组。 xml 有一些名为“类”的节点,我想将其设置为数组 $this->class[0], $this->class[1]... 它有子数组。我希望它是动态的,因为我有一些结构相似的 XML 文件,我不想知道每个节点的所有名称。谢谢!
【解决方案2】:

您应该在填充之前尝试创建数组。 IE。 $this->key = array();

也就是说,在遍历 XML 元素之前。

【讨论】:

    猜你喜欢
    • 2019-08-11
    • 2017-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多