Ошибки неправильного смещения возникают при попытке получить доступ к индексу массива с помощью объекта или массива в качестве ключевого слова.
Пример:
$x = new stdClass();
$arr = array();
echo $arr[$x];
//illegal offset type
Ваш массив $xml содержит объект или массив в $xml->entry[$i]->source для некоторого значения $i, а когда вы пытаетесь использовать его как индексный ключ для $s, вы получите это предупреждение. Вы должны убедиться, что $xml содержит то, что вы хотите, и что вы правильно обращаетесь к нему.
Ответ 2
Используйте trim($source) до $s[$source].
Ответ 3
check $xml- > entry [$ i] существует и является объектом
перед попыткой получить его свойство
или $source может быть не смещение законного массива, а массив, объект, ресурс или возможно null
Ответ 4
В вашем xml файле может быть меньше 20 записей.
измените код на этот
for ($i=0;$i< sizeof($xml->entry); $i++)
...
Ответ 5
У меня была аналогичная проблема. Поскольку у меня появился символ из моего XML файла, мне пришлось сначала преобразовать его в String (или Integer, если вы ожидаете его). Ниже показано, как я решил проблему.
foreach($xml->children() as $newInstr){
$iInstrument = new Instrument($newInstr['id'],$newInstr->Naam,$newInstr->Key);
$arrInstruments->offsetSet((String)$iInstrument->getID(), $iInstrument);
}