如何解决这个非法偏移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); }