搜尋

首頁  >  問答  >  主體

用php寫一個關於取得指定天數的天氣狀況函數,功能段正常但是一加到for迴圈就無顯示無報錯,該怎麼解決?

參考資料:
新浪天氣api說明
簡要說明url中的最後一個參數day=0代表今天,如果等於1就代表第二天,以此類推,但是最大值為3.

程式碼目標:

金華天氣

#今天xx-xx-xx 星期x 白天晴轉多雲 晚上xxxx

##星期x 白天晴轉多雲 晚上xxxx (第2天)

星期x 白天晴轉多雲 晚上xxxx(第3天)

星期x 白天晴轉多雲 晚上xxxx(第4天)

<?php 
function get_weather($k=3){
 $arr = array('星期日','星期一','星期二','星期三','星期四','星期五','星期六','星期日','星期一','星期二');
 $week=date('w');
 $arrfeng=array('无风','软风','轻风','微风','和风','轻劲风','强风','疾风','大风','烈风','狂风','暴风','台风','风王之王');
 $winfo='金华天气';
for ($i=0; $i>$k ; $i++) { 
          $url='http://php.weather.sina.com.cn/xml.php?city=%bd%f0%bb%aa&password=DJOYnieT8234jlsK&day='.$i;
          $ch=curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
          $output = curl_exec($ch);
curl_close($ch);
          $outobj=simplexml_load_string($output);
          $a=$outobj->Weather;
//为了方便拼接字符串
          $b=$a->status1;//天气情况1代表白天
          $c=$a->status2;//天气情况2代表晚上
          $d=$a->direction1;//白天风向
          $e=$a->direction2;//晚上风向
          $dd=$a->power1;//白天风级数
          $ee=$a->power2;//晚上风级数
if($c=="")$c=$b;//解决 当晚上和白天 天气一样时 变量ee值为空
             //$winfo='金华天气'
              $winfo.= $arr[$week+$k].'白天'.$b.$d.$arrfeng[intval($dd)].'晚上'.$c.$e.$arrfeng[intval($ee)].'\n';
          }
return $winfo;
}
$str=get_weather(3);
echo $str;
?>
但是如果不加for迴圈,執行4次函數就可以實線就可以實現。程式碼如下

<?php 
function get_weather($i){
 $arr = array('星期日','星期一','星期二','星期三','星期四','星期五','星期六','星期日','星期一','星期二');
 $week=date('w');
 $arrfeng=array('无风','软风','轻风','微风','和风','轻劲风','强风','疾风','大风','烈风','狂风','暴风','台风','风王之王');
 $winfo='  ';
          $url='http://php.weather.sina.com.cn/xml.php?city=%bd%f0%bb%aa&password=DJOYnieT8234jlsK&day='.$i;
          $ch=curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
          $output = curl_exec($ch);
curl_close($ch);
          $outobj=simplexml_load_string($output);
          $a=$outobj->Weather;
//为了方便拼接字符串
          $b=$a->status1;//天气情况1代表白天
          $c=$a->status2;//天气情况2代表晚上
          $d=$a->direction1;//白天风向
          $e=$a->direction2;//晚上风向
          $dd=$a->power1;//白天风级数
          $ee=$a->power2;//晚上风级数
if($c=="")$c=$b;//解决 当晚上和白天 天气一样时 变量ee值为空
             //$winfo='金华天气';原本在这里(每循环一次就被清空一次这是错误的)
              $winfo.= $arr[$week+$i].'白天'.$b.$d.$arrfeng[intval($dd)].'晚上'.$c.$e.$arrfeng[intval($ee)].'\n';
          
return $winfo;
}
$str0=get_weather(0);
$str1=get_weather(1);
$str2=get_weather(2);
$str3=get_weather(3);
echo '金华天气'.$str0.$str1.$str2.$str3;
?>

輸出如下:

金華天氣星期五白天雷陣雨東風無風晚上多雲東風無風n 星期六白天雷陣雨東風無風晚上多雲東風無風n 星期日白天多雲東風無風晚上晴東風無風n 星期一白天晴東風無風晚上晴無風n###
女神的闺蜜爱上我女神的闺蜜爱上我2709 天前877

全部回覆(2)我來回復

  • 阿神

    阿神2017-07-03 11:42:37

    你for迴圈的判斷條件不對啊。怎麼可能寫成$i>$k,再讓$i++的。

    <?php 
    function get_weather($k=3){
     $arr = array('星期日','星期一','星期二','星期三','星期四','星期五','星期六','星期日','星期一','星期二');
     $week=date('w');
     $arrfeng=array('无风','软风','轻风','微风','和风','轻劲风','强风','疾风','大风','烈风','狂风','暴风','台风','风王之王');
     $winfo='金华天气';
    for ($i=0; $i<=$k ; $i++) { 
              $url='http://php.weather.sina.com.cn/xml.php?city=%bd%f0%bb%aa&password=DJOYnieT8234jlsK&day='.$i;
              $ch=curl_init($url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
              $output = curl_exec($ch);
    curl_close($ch);
              $outobj=simplexml_load_string($output);
              $a=$outobj->Weather;
    //为了方便拼接字符串
              $b=$a->status1;//天气情况1代表白天
              $c=$a->status2;//天气情况2代表晚上
              $d=$a->direction1;//白天风向
              $e=$a->direction2;//晚上风向
              $dd=$a->power1;//白天风级数
              $ee=$a->power2;//晚上风级数
    if($c=="")$c=$b;//解决 当晚上和白天 天气一样时 变量ee值为空
                 //$winfo='金华天气'
                  $winfo.= $arr[$week+$k].'白天'.$b.$d.$arrfeng[intval($dd)].'晚上'.$c.$e.$arrfeng[intval($ee)].'\n';
              }
    return $winfo;
    }
    $str=get_weather(3);
    echo $str;
    ?>

    回覆
    0
  • 给我你的怀抱

    给我你的怀抱2017-07-03 11:42:37

    for循環條件寫錯了,應該是 $i<=$k

    回覆
    0
  • 取消回覆