如何解决这个非法偏移types的错误

我得到这个代码的每个迭代“非法偏移types”错误。 这里的代码可以帮助任何人:

$s = array(); for($i = 0; $i < 20; $i++){ $source = $xml->entry[$i]->source; $s[$source] += 1; } print_r($s) 

有任何想法吗。 提前致谢。

当您尝试使用对象数组作为索引键访问数组索引时,会出现非法的偏移types错误。

例:

 $x = new stdClass(); $arr = array(); echo $arr[$x]; //illegal offset type 

您的$xml数组包含$xml->entry[$i]->source的对象或数组,当您尝试将$s用作$s的索引键时,会得到该警告。 你必须确保$xml包含你想要的,并且你正确地访问它。

$s[$source]之前使用trim($source)

检查$ xml->条目[$ i]是否存在,并在尝试获取它的属性之前是对象

  if(isset($xml->entry[$i]) && is_object($xml->entry[$i])){ $source = $xml->entry[$i]->source; $s[$source] += 1; } 

或$ source可能不是一个合法的数组偏移量,而是一个数组,对象,资源或可能为null

在你的xml中可能less于20个条目。

将代码更改为此

 for ($i=0;$i< sizeof($xml->entry); $i++) ... 

我有一个类似的问题。 当我从我的XML孩子得到一个字符,我不得不先将它转换为一个string(或整数,如果你期望)。 以下显示了我如何解决这个问题。

 foreach($xml->children() as $newInstr){ $iInstrument = new Instrument($newInstr['id'],$newInstr->Naam,$newInstr->Key); $arrInstruments->offsetSet((String)$iInstrument->getID(), $iInstrument); }