Что вызывает предупреждение & quot; Указан неверный аргумент для foreach () & quot; в этом случае?

Я не могу понять, что в этом случае вызывает предупреждение о недопустимом аргументе. Я видел, что есть много информации о самом предупреждении, но поскольку я новичок (начал сегодня с php), я не могу понять это, даже если я прочитал много вопросов по этому поводу на форуме.
Ошибка возникает в цикле for-each. Пожалуйста, будьте очень точны в своих ответах, пока я учусь.

<?php
function GetWeather($city){
$content = file_get_contents("http://api.openweathermap.org/data/2.5/weather?q=" . $city . "&units=metric");

$data = json_decode($content, true);

$placeinfo = '<span id="City">' . $data['name'] . ", " . $data['sys']['country'] . '</span>'
.   "<br />".   '<span id="Conditions">' . $data['weather']['0']['main'] . '</span>'
.   "<br />".   '<span id="Temperature">'  . ceil($data['main']['temp']) . " C</span>".   "<br />";
return $data ['weather']['0']['main'];

}

Function GetFlickr($city, $conditions)
{
$apikey = '';
$apisecret = '';

$flickrurl = "https://api.flickr.com/services/rest/?method=flickr.photos.search&tags=" . $city . "," . $conditions . "&sort=relevance&format=json&api_key=" .$apikey;
$flickrurl .= 'per_page = 1';
$result = file_get_contents($flickrurl);
$jason = substr($result,  strlen("JasonFlickrApi(")-1);
$flickrjson = json_decode($jason, true);

var_dump($flickrjson);

foreach ($flickrjson['photos']['photo'] as $photo) {
$url = "http://farm" . $photo['farm'] . ".static.flickr.com/" . $photo['server'] . "/" . $photo['id'] . "_" . $photo['secret'] . "_m.jpg";
?>
<img src="<?php echo $url; ?> " alt=" <?php echo $photo ['title']; ?>">
<?php
}
}
?>

1

Решение

Изменить…

foreach ($flickrjson['photos']['photo'] as $photo) {

чтобы …

foreach ($flickrjson['photos'] as $photo) {

объяснение
foreach перебирает массивы, и мне кажется, что вы пытаетесь зациклить отдельный объект, а не массив.

В основном, хотя invalid argument supplied foreach() означает, что вы передали что-то, что не является массивом или объектом, например строка, целое число или ноль.

3

Другие решения

для каждого будет генерировать это предупреждение, если данный аргумент не является массив или объект

Вы должны всегда делать эту проверку перед вызовом foreach ()

if (is_array ($flickrjson['photos']['photo'])) {
foreach ($flickrjson['photos']['photo'] as $photo) {
// ...
}
}else {
// a good/must practice to log warning/error/fatal
// log.warn("invalid argument");
}
0

По вопросам рекламы [email protected]