php - как исправить эту ошибку типа незаконного смещения


Я получаю ошибку "незаконный тип смещения" для каждой итерации этого кода. Вот код на случай, если кто-то может помочь:

$s = array();

for($i = 0; $i < 20; $i++){

    $source = $xml->entry[$i]->source;
    $s[$source] += 1;

}

print_r($s)

любые идеи. Спасибо заранее.

5 63

5 ответов:

незаконное смещение типа ошибки при попытке доступа к индексу массива с помощью объект или массив как ключ индекса.

пример:

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

код $xml массив содержит объект или массив в $xml->entry[$i]->source для некоторого значения $i, и когда вы пытаетесь использовать это в качестве ключа индекса для $s, вы получите это предупреждение. Вы будете иметь, чтобы убедиться, что $xml содержит то, что вы хотите, и что вы получаете к нему доступ правильно.

использовать trim($source) до $s[$source].

проверить $xml - > запись[$i] существует и является объектом прежде чем пытаться получить его свойство

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

или $source может быть не законным смещением массива, а массивом, объектом, ресурсом или, возможно, null

в вашем xml, вероятно, меньше 20 записей.

измените код на этот

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

У меня была похожая проблема. Поскольку я получил символ от своего XML-ребенка, мне пришлось сначала преобразовать его в строку (или целое число, если вы ожидаете его). Ниже показано, как я решил эту проблему.

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