1

我无法理解在这种情况下导致无效参数警告的原因。我已经看到有很多关于警告本身的信息,但是由于我是新手(从今天开始使用 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
    }
 }
 ?>
4

2 回答 2

3

改变...

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

至...

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

解释
foreach循环遍历数组,上面的内容在我看来就像你试图循环一个单一的对象而不是一个数组。

基本上,虽然invalid argument supplied foreach()意味着您传递的不是数组或对象,例如字符串、整数或空值。

于 2015-03-17T17:00:41.123 回答
0

如果给定参数不是数组对象, 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");
}
于 2015-03-17T17:05:19.953 回答