111 votes

php - Comment corriger cette erreur de type offset illégal ?

Je reçois

type de décalage illégal

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)

184voto

zombat Points 46702

Type de décalage illégal se produisent lorsque vous tentez d'accéder à un index de tableau à l'aide d'une méthode de type objet ou un réseau comme clé d'index.

Exemple :

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

Votre $xml contient un objet ou un tableau à $xml->entry[$i]->source pour une certaine valeur de $i et lorsque vous essayez de l'utiliser comme clé d'indexation pour le fichier $s vous recevez cet avertissement. Vous devez vous assurer que $xml contient ce que vous voulez et que vous y accédez correctement.

26voto

Zafer Points 21

Utilice trim($source) antes de $s[$source] .

5voto

brian_d Points 6783

Vérifie que $xml->entry[$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 offset de tableau légal mais un tableau, un objet, une ressource ou éventuellement null

0voto

Byron Whitlock Points 29863

Il y a probablement moins de 20 entrées dans votre xml.

modifier le code comme suit

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

0voto

user8387356 Points 1

J'ai eu un problème similaire. Comme j'ai obtenu un caractère de mon enfant XML, j'ai dû le convertir d'abord en chaîne (ou en 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);
    }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X