Подтвердить что ты не робот

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

я собираюсь

недопустимый тип смещения

ошибка для каждой итерации этого кода. Вот код:

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

print_r($s)
4b9b3361

Ответ 1

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

Пример:

$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] существует и является объектом перед попыткой получить его свойство

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

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