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