对于这个话题的巨大无知感到抱歉,但是当我遇到PHP问题时,我真的不知道除了这个网站以外在哪里看。
我在这里要做的是使用预先指定的ID来从数据库中调用特定的电影。但我得到的是在第二个和第三个foreach下面的'foreach()'消息中提供的“无效参数”。
这是我头脑中的代码:
//Custom lists of movies to bring in
//New Releases list
$films_new_releases = array(40805, 46705, 41630, 44564, 39451, 20352, 43933, 49009, 49797, 42194);
//Most Popular list
$films_most_popular = array(27205, 16290, 10138, 41733, 37799, 18785, 19995, 17654, 10140, 12162);
//Get information from address bar
$list = $_GET['l'];
if ($list == 'new releases') {
$list_chosen = $films_new_releases;
}
elseif ($list == 'most popular') {
$list_chosen = $films_most_popular;
}
else {
$list_chosen = $films_new_releases;
}
在身体中:
// Loop through each film returned
foreach ($list_chosen as $list_chosen_film) {
$films_result = $tmdb->getMovie($list_chosen_film);
$film = json_decode($films_result);
// 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 == 'poster') {
$backdrop_url = $backdrop->image->url;
}
}
echo '<div class="view-films-film">
<a href="film.php?id=' . $film->id . '"><img src="' . $backdrop_url . '" alt="' . $film->name . '" /></a>
<div class="view-films-film-snippet">
<h2><a href="film.php?id=' . $film->id . '">' . $film->name . '</a></h2>';
if ($film->certification != null) {
echo '<img src="images/bbfc-' . strtolower($film->certification) . '.png" alt="" />';
}
echo ' <h3>Starring</h3>
<p>';
$num_actors = 0;
foreach ($film->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 ($film->cast as $cast) {
if ($cast->job == 'Director') {
echo '<a href="person.php?id=' . $cast->id . '">' . $cast->name . '</a> ';
}
}
echo ' </p>
</div>
</div>';
}
// End films
}
我所做的一点点测试是检查$list_chosen
,$list_chosen_film
,$films_result
和$film
实际包含的内容,方法是在页面底部打印它们。
$list_chosen
显示 - Array
,$list_chosen_film
显示 - 42194
,$films_result
显示整个JSON字符串,$film
显示 - {{1 }}
答案 0 :(得分:2)
尝试添加:
print_r($film->backdrop);
在第二个foreach()循环之前。在错误消息之前,它不是数组,或者它将包含零元素(不允许)。如果你还添加:
echo $films_result;
您将能够调试它并完全理解错误。如果没有,请在您的问题中发布整个输出。
答案 1 :(得分:1)
这种情况发生了,因为 - 正如PHP通知您显示的错误 - 您为foreach
循环提供了错误的参数,可能是null
或其他一些值。确保你为foreach提供数组。
此外,每次使用foreach
时,请执行以下操作:
if (count($some_list) > 0) {
foreach ($some_list as $list_item) {
// code for each item on the list
}
} else {
// code when there is nothing on the list
}
这将确保您不会因为列表中没有任何内容而看到错误。
修改强>
在documentation page上,如果您尝试迭代的集合为空,您可以找到一些提示,以避免此类错误。只需将集合转换为array
类型:
foreach ((array) $some_list as $list_item) {
// code for each item on the list
}
答案 2 :(得分:0)
你能提供一部电影转储吗?该错误告诉您,您指向的是无法迭代的对象(很可能是null)。