web-dev-qa-db-fra.com

php - Comment puis-je corriger cette erreur de type de décalage illégal

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)
67
Steven

Des erreurs de type de décalage illégales se produisent lorsque vous essayez d'accéder à un index de tableau à l'aide d'un objet ou d'un tableau en tant que clé d'index.

Exemple:

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

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

121
zombat

Utilisez trim($source) avant $s[$source].

20
Zafer

check $ 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 nul

3
brian_d

J'avais un problème similaire. Comme j'avais un personnage de mon enfant XML, je devais d'abord le convertir en chaîne (ou en entier, si vous en attendez une). 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);
    }
0
user8387356

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

changer le code pour cela

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