Я не могу понять, что в этом случае вызывает предупреждение о недопустимом аргументе. Я видел, что есть много информации о самом предупреждении, но поскольку я новичок (начал сегодня с 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
}
}
?>
Изменить…
foreach ($flickrjson['photos']['photo'] as $photo) {
чтобы …
foreach ($flickrjson['photos'] as $photo) {
объяснение
foreach
перебирает массивы, и мне кажется, что вы пытаетесь зациклить отдельный объект, а не массив.
В основном, хотя invalid argument supplied foreach()
означает, что вы передали что-то, что не является массивом или объектом, например строка, целое число или ноль.
для каждого будет генерировать это предупреждение, если данный аргумент не является массив или объект
Вы должны всегда делать эту проверку перед вызовом 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");
}