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

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

$s = array(); for($i = 0; $i < 20; $i++){ $source = $xml->entry[$i]->source; $s[$source] += 1; } print_r($s) 

Есть идеи. Заранее спасибо.

Solutions Collecting From Web of "php – Как исправить эту ошибку неправильного типа смещения"

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

Пример:

 $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); }