Как я могу исправить эту недопустимую ошибку типа смещения - PullRequest
73 голосов
/ 28 апреля 2010

Я получаю

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

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

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

print_r($s)

Ответы [ 5 ]

129 голосов
/ 28 апреля 2010

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

Пример:

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

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

23 голосов
/ 11 ноября 2011

Используйте trim($source) до $s[$source].

3 голосов
/ 28 апреля 2010

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

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

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

0 голосов
/ 29 июля 2017

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

foreach($xml->children() as $newInstr){
        $iInstrument = new Instrument($newInstr['id'],$newInstr->Naam,$newInstr->Key);
        $arrInstruments->offsetSet((String)$iInstrument->getID(), $iInstrument);
    }
0 голосов
/ 28 апреля 2010

Возможно, в вашем xml меньше 20 записей.

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

for ($i=0;$i< sizeof($xml->entry); $i++)
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...