Ich erhalte
unzulässiger Offset-Typ
Fehler für jede 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)
Antworten:
Unzulässige Fehler vom Typ Offset treten auf, wenn Sie versuchen, mit einem Objekt oder einem Array als Indexschlüssel auf einen Array-Index zuzugreifen .
Beispiel:
$x = new stdClass();
$arr = array();
echo $arr[$x];
//illegal offset type
Ihr $xmlArray enthält ein Objekt oder Array mit $xml->entry[$i]->sourceeinem Wert von $i. Wenn Sie versuchen, dieses als Indexschlüssel für zu verwenden $s, wird diese Warnung angezeigt. Sie müssen sicherstellen, dass es das $xmlenthält, was Sie möchten, und dass Sie korrekt darauf zugreifen.
$xmlVariable mit einem XML-Parser erstellt? simple_xml oder DOMDocument? In diesem Fall ist es wahrscheinlich, dass der Quellknoten tatsächlich eine Art Dom-Element-Objekt ist.
$xml->entry[$i]->source->div. Wenn Sie HTML in eine DOM-Struktur analysieren möchten, DomDocumentverfügt diese über eine loadHTML()Funktion, die HTML viel besser verarbeitet als SimpleXML. Überprüfen Sie heraus php.net/manual/en/domdocument.loadhtml.php
Verwenden Sie trim($source)vor $s[$source].
(string)$source). Die Ergebnisse hängen vollständig von der Implementierung von __toString () ab . Es funktioniert, wenn Sie ein SimpleXMLObjekt haben (etwas, das anscheinend von allen angenommen, aber in der Frage nie wirklich angegeben wurde).
Überprüfen Sie, ob $ xml-> entry [$ i] vorhanden und ein Objekt ist, bevor Sie versuchen, eine Eigenschaft davon abzurufen
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
Es gibt wahrscheinlich weniger als 20 Einträge in Ihrer XML.
Ändern Sie den Code in diesen
for ($i=0;$i< sizeof($xml->entry); $i++)
...
Ich hatte ein ähnliches Problem. Da ich von meinem XML-Kind ein Zeichen bekam, musste ich es zuerst in einen String (oder eine Ganzzahl, wenn Sie eine 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);
}
$sourcees sich um eine Instanz handelt,SimpleXMLund liefern Informationen, die nur für diese bestimmte Situation gelten. Während dies letztendlich der Fall war, wurde dies in der Frage nicht angegeben, und wer auch immer als Referenz hierher kommt, sollte dies berücksichtigen.