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