php - 如何修复此非法偏移类型错误

时间:2010-04-28 19:15:25

标签: php arrays

我正在

  

非法偏移类型

此代码的每次迭代都会出现

错误。这是代码:

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

print_r($s)

5 个答案:

答案 0 :(得分:128)

当您尝试使用对象数组作为索引键来访问数组索引时,会发生非法偏移类型错误。

示例:

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

您的$xml数组包含$xml->entry[$i]->source处的某个对象或数组,其值为$i,当您尝试将其用作$s的索引键时,得到那个警告。您必须确保$xml包含您想要的内容以及您正确访问它。

答案 1 :(得分:22)

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

答案 2 :(得分:3)

检查$ xml-&gt;条目[$ i]是否存在且是一个对象 在尝试获取它的属性之前

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

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

答案 3 :(得分:0)

xml中可能只有不到20个条目。

将代码更改为此

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

答案 4 :(得分:0)

我有类似的问题。当我从我的XML子项中获得一个Character时,我必须先将它转换为String(或整数,如果你期望的话)。以下显示了我如何解决问题。

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