Вложенные операторы foreach недействительны.Помогите? - PullRequest
3 голосов
/ 11 мая 2011

Пожалуйста, прости крайний стиль кодирования новичка. Я впервые работаю со строками PHP и JSON из API.

То, что я пытаюсь сделать здесь, что, очевидно, не работает, если вы просматриваете его, - это распечатать несколько результатов просмотра фильма, которые ищет пользователь. Это страница результатов поиска - с плакатом фильма и некоторыми ключевыми деталями рядом с каждым элементом.

Одной из вещей, которые я хочу видеть рядом с каждым результатом, является список первых 5 актеров, перечисленных в фильме как «В главных ролях», а затем всех режиссеров, указанных в фильме как «Режиссер».

Проблема, без сомнения, в том, что я вложил утверждения foreach. Но я не знаю другого способа сделать это.

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

Вот код:

  // Check if there were any results
  if ($films_result == '["Nothing found."]' || $films_result == null) {
  }
  else {  
      // Loop through each film returned
      foreach ($films as $film) {

        // Set default poster image to use if film doesn't have one
        $backdrop_url = 'images/placeholder-film.gif';

        // Loop through each poster for current film
        foreach($film->backdrops as $backdrop) {
          if ($backdrop->image->size == 'thumb') {
            $backdrop_url = $backdrop->image->url;
          }
        }
        echo '<div class="view-films-film">
            <a href="film.php?id=' . $film->id . '"><img src="' . $backdrop_url . '" alt="' . strtolower($film->name) . '" /></a>
                <div class="view-films-film-snippet">
                    <h2><a href="film.php?id=' . $film->id . '">' . strtolower($film->name) . '</a></h2>
                    <img src="images/bbfc-' . strtolower($film->certification) . '.png" alt="" />
                    <h3>Starring</h3>
                    <p>';
        $num_actors = 0;
        foreach ($films[0]->cast as $cast) {
        if ($cast->job == 'Actor') {
          echo '<a href="person.php?id=' . $cast->id . '">' . $cast->name . '</a> ';
          $num_actors++;
          if ($num_actors == 5)
            break;
        }
        }
        echo '      </p>
                    <h3>Director</h3>
                    <p>';
        foreach ($films[0]->cast as $cast) {
            if ($cast->job == 'Director') {
                echo '<a href="person.php?id=' . $cast->id . '">' . $cast->name . '</a> ';
            }
        }
        echo '      </p>
                </div>
            </div>';

      // End films
      }
  }

Пример результата будет следующим:

in situ

со строкой 120, равной foreach ($films[0]->cast as $cast) {, и строкой 131, равной foreach ($films[0]->cast as $cast) {

1 Ответ

4 голосов
/ 11 мая 2011

Почему вы используете $ films [0], когда вы находитесь в foreach ($ films как $ film)?Вы должны использовать $ film-> cast right?И вы должны сбросить $ film в начале вашего цикла с помощью var_dump и проверить его - убедитесь, что $ cast является массивом и заполнен.Если это не так, вернитесь оттуда.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...