Справочная информация: Я извлекаю XML-объекты из общедоступного API IMDB-for-TV. Моя цель - вытащить определенные ценности из этих объектов - например, список каждого эпизода, помещенный в массив, чтобы я мог делать то, что я хочу с ним.(PHP) Проблема с использованием объектов
Проблема: Хотя я могу написать код, который выполняет точно так, как я его хочу, он выплевывает ошибки, так как я знаю, что что-то не так с тем, как я перебираю мои объекты ... но я не может найти лучшего способа. Мне бы очень понравился совет.
Итак, сначала взгляните на объект, с которым я имею дело.
SimpleXMLElement Object
(
[Episodelist] => SimpleXMLElement Object
(
[Season] => Array
(
[0] => SimpleXMLElement Object
(
[episode] => Array
(
[0] => SimpleXMLElement Object
(
[epnum] => 1
[seasonnum] => 01
[prodnum] => 101
[airdate] => 1989-07-05
[link] => http://www.tvrage.com/Seinfeld/episodes/305788
[title] => Good News, Bad News
)
[1] => SimpleXMLElement Object
(
[epnum] => 2
[seasonnum] => 02
[prodnum] => 103
[airdate] => 1990-05-31
[link] => http://www.tvrage.com/Seinfeld/episodes/150618
[title] => The Stakeout
)
Шоу представляет собой объект, содержащий объект «список эпизодов», который содержит объект «сезон х», который содержит объект «эпизод у», который содержит значение я после - «названия». Поэтому для каждого эпизода я хочу захватить $this->list->Season[X]->episode[Y]->title
.
Вот функция, которую я написал для этого. Это два аргумента: номер сезона и номер эпизода.
public function showEpisode($s,$e) {
$s = $s - 1; // To compensate for zero-indexing.
$e = $e - 1;
if (!empty($this->list->Season[$s]) && !empty($this->list->Season[$s]->episode[$e])) {
return $this->list->Season[$s]->episode[$e]->title;
} else {
return 0;
}
}
Я знаю, что что-то не так, как написано.
В любом случае, вот мой код для работы с ним.
$season = 1;
$episode = 1;
$errors = 0;
while ($errors < 2) {
if ($xfiles->showEpisode($season,$episode)!= 0) {
echo $xfiles->showEpisode($season,$episode) . "<br />";
$episode++;
$errors = 0;
} else {
$errors++;
$season++;
$episode = 1;
}
}
Моя логика:
- Начало Сезон 1, Эпизод 1.
- Echo название текущего эпизода.
- Если это не удается, увеличьте счетчик ошибок на единицу и увеличьте сезон, увеличив $ season ++ и вернув счетчик $ episode в 1.
- Если вы получаете две ошибки подряд, это означает, что вы поднимаетесь вверх сезон потерпел неудачу, потому что мы попали в конец шоу, поэтому цикл заканчивается.
Желаемый результат: Простой, простой список каждого эпизода. Фактический результат: Пустая страница, используя этот код; ничего не возвращается. Когда я использовал свою последнюю версию функции, которую я очень глупо удалил и, похоже, не могу воссоздать, я сделал эхо полный набор эпизодов точно так, как я хотел - но после каждого сезона и три раза в конце файла, я получил ошибки «Попытка получить свойства не-объектов» из-за вызовов к несуществующим эпизодам.
Вопрос: Каков правильный, практичный способ петли через такой большой объект? Какие условия следует использовать в моей функции showEpisode, чтобы проверить, будет ли результат существовать или нет?
Спасибо за тонну всем, кто может помочь, я сделал все возможное и много сделал в Googled, но я просто озадачен.
+1, это лучший письменный вопрос, который я когда-либо видел! Я очень рад, что смог помочь :) – scenia