Je suis en train
type de décalage illégal
erreur pour chaque itération de ce code. Voici le code:
$s = array();
for($i = 0; $i < 20; $i++){
$source = $xml->entry[$i]->source;
$s[$source] += 1;
}
print_r($s)
Réponses:
Des erreurs de type de décalage illégales se produisent lorsque vous essayez d'accéder à un index de tableau en utilisant un objet ou un tableau comme clé d'index.
Exemple:
$x = new stdClass();
$arr = array();
echo $arr[$x];
//illegal offset type
Votre $xmltableau contient un objet ou un tableau à $xml->entry[$i]->sourcepour une valeur de $i, et lorsque vous essayez de l'utiliser comme clé d'index pour $s, vous obtenez cet avertissement. Vous devrez vous assurer qu'il $xmlcontient ce que vous voulez et que vous y accédez correctement.
$xmlvariable en utilisant une sorte d'analyseur XML? simple_xml ou DOMDocument? Dans ce cas, il est probable que le nœud source soit en fait une sorte d'objet élément dom.
$xml->entry[$i]->source->div. Si vous souhaitez analyser le HTML dans une structure DOM, DomDocumenta une loadHTML()fonction qui gère le HTML beaucoup mieux que SimpleXML. Découvrez php.net/manual/en/domdocument.loadhtml.php
Utiliser trim($source)avant $s[$source].
(string)$source) et les résultats dépendent entièrement de son implémentation __toString () . Cela fonctionne si vous avez un SimpleXMLobjet (quelque chose apparemment assumé par tout le monde mais jamais vraiment déclaré dans la question).
vérifier $ xml-> l'entrée [$ i] existe et est un objet avant d'essayer d'en obtenir une propriété
if(isset($xml->entry[$i]) && is_object($xml->entry[$i])){
$source = $xml->entry[$i]->source;
$s[$source] += 1;
}
ou $ source peut ne pas être un décalage de tableau légal mais un tableau, un objet, une ressource ou éventuellement null
Il y a probablement moins de 20 entrées dans votre xml.
changez le code en ceci
for ($i=0;$i< sizeof($xml->entry); $i++)
...
J'avais un problème similaire. Comme j'ai obtenu un caractère de mon enfant XML, j'ai dû le convertir d'abord en une chaîne (ou un entier, si vous en attendez un). Ce qui suit montre comment j'ai résolu le problème.
foreach($xml->children() as $newInstr){
$iInstrument = new Instrument($newInstr['id'],$newInstr->Naam,$newInstr->Key);
$arrInstruments->offsetSet((String)$iInstrument->getID(), $iInstrument);
}
$sources'agit d'une instance deSimpleXMLet fournissent des informations qui ne s'appliquent qu'à cette situation spécifique. Bien que ce soit finalement le cas, la question ne l'a pas dit et quiconque vient ici pour référence devrait en tenir compte.