webentwicklung-frage-antwort-db.com.de

php - Wie kann ich diesen illegalen Offset-Fehler beheben?

Ich erhalte 

unzulässiger Offset-Typ

fehler bei jeder Iteration dieses Codes. Hier ist der Code:

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

print_r($s)
67
Steven

Unzulässiger Offset-Typ - Fehler treten auf, wenn Sie versuchen, auf einen Array-Index zuzugreifen, indem Sie als Indexschlüssel ein object oder ein array verwenden.

Beispiel:

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

Ihr $xml-Array enthält ein Objekt oder ein Array unter $xml->entry[$i]->source für einen bestimmten Wert von $i. Wenn Sie versuchen, dies als Indexschlüssel für $s zu verwenden, wird diese Warnung angezeigt. Sie müssen sicherstellen, dass $xml enthält, was Sie möchten, und dass Sie richtig darauf zugreifen.

121
zombat

Verwenden Sie trim($source) vor $s[$source].

20
Zafer

check $ xml-> entry [$ i] existiert und ist ein Objekt , bevor versucht wird, eine Eigenschaft davon zu erhalten

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

oder $ source ist möglicherweise kein zulässiger Array-Offset, sondern ein Array, ein Objekt, eine Ressource oder möglicherweise null

3
brian_d

Ich hatte ein ähnliches Problem. Da ich von meinem XML-Kind einen Charakter erhalten habe, musste ich ihn zuerst in einen String (oder Integer, falls Sie einen erwarten) konvertieren. Das Folgende zeigt, wie ich das Problem gelöst habe.

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

Es gibt wahrscheinlich weniger als 20 Einträge in Ihrer XML.

Ändern Sie den Code zu diesem

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