2015-03-17 6 views
1

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

<?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 
    } 
} 
?> 
+0

Вы уверены, что $ flickrjson ['photos'] ['photo'] - массив или истребимый элемент? – NaeiKinDus

+0

Что делает 'var_dump ($ flickrjson);' выходы? – itachi

ответ

3

Изменить ...

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

к ...

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

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

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

+0

Привет, обменялся на 2 кода, который вы указали, но не видел никакого эффекта на предупреждение. Вы упомянули, что проблема в том, что я передал что-то, что не является массивом. Когда я пытаюсь сбрасывать var flickrjson; Я получаю Null. Вы видите, почему это происходит? – AV67

+1

Вам нужно выяснить, где ваш код не работает должным образом. Я предлагаю вам сбросить '$ result' и' $ jason' (который должен быть '$ json' действительно). Также попробуйте удалить пробелы в строке '' per_page = 1''. – diggersworld

0

Еогеасп будет генерирует это предупреждение, если данный аргумент не является массив или Object
Вы всегда должны сделать эту проверку перед вызовом к каждому элементу()

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"); 
} 
Смежные вопросы