Вызов RSS-канала с использованием оператора For приводит к ошибке, не связанной с объектом. - PullRequest
0 голосов
/ 10 января 2012

Я отображаю RSS-канал, используя простое утверждение For ...

для ($ i = 0; $ i <= 19; $ i ++) </p>

Теперь это работает без проблем и отображает 20 записей с использованием эха, но моя проблема заключается в том, что если доступ к каналу содержит менее 20 элементов, я получаю ошибку, не связанную с объектом.

По сути, когда цикл for должен завершиться раньше, это дает мне необъектную ошибку.

Кто-нибудь может порекомендовать, как это обойти?

EDIT:

Запрошена дополнительная информация:

Это просто список ссылок, созданных в ленте RSS. Несколько, на самом деле, некоторые будут иметь более 20 элементов, некоторые меньше, но я хочу, чтобы они отображались с использованием одного и того же кода.

В основном ...

for ($i=0; $i<=19; $i++)
  {
  $item_title=$x->item($i)->getElementsByTagName('title')
  ->item(0)->childNodes->item(0)->nodeValue;

 echo ($item_title);

}

Ответы [ 2 ]

0 голосов
/ 10 января 2012

Проверьте длину $item до того, как вы сделаете выписку for:

if(count($item) > 19) {
    //do your for statement
} else {
    //do a foreach statement
}

Или вы можете проверить, существует ли $item[$i] (не null) раньшепытаясь разобрать это.Я предполагаю, что отсюда ваша ошибка.

for ($i=0; $i<=19; $i++) {
    if(array-key-exists($i, $item)) {
        //do everything you want
    }
    $i++;
}

Этот второй метод будет циклически повторяться 20 раз, несмотря ни на что.Когда внутренний if имеет значение false, он все равно будет работать до тех пор, пока $i не станет 20. Так что, если у вас есть только 10 записей в вашем RSS, for будет выполняться еще 10 раз (всего 20).Я бы предложил проверить длину до for, а затем использовать foreach, если длина меньше 20.

Вот пример использования метода оператора if.

// set $length to the lenght of your RSS array
$length = count($your_rss_array);

// if your RSS array has more than 20 items, limit $length to 20
if(count($item) > 20) {
    $length = 20;
}

// $length will either be as long as the RSS array is, or will be 20
for ($i = 0; $i < $length; $i++) {
    $item_title = $x -> item($i) -> getElementsByTagName('title') -> item(0) ->
                  childNodes -> item(0) -> nodeValue;
    echo $item_title;
}
0 голосов
/ 10 января 2012

Всегда можно найти количество элементов. Тогда используйте

для ($ i = 0; $ i <$ length; $ i ++) </p>

...