2017-12-06 22 views
-1

サイトに月単位のデータがJSON形式で格納されています。これは、そうのように照会することができます。PHPでforeachを使用してJSONデータを取得する

http://www.example.com?startdate=1-1-1985&enddate=31-1-1985 

私がnullデータが返されるまで後方に動作し、その後、今日の月から始まる、私が探しています具体的なデータを取得するスクリプトを実行できるようにしたいです。毎月の価値を合計する必要があります。これまでのところ、これは私が持っているものです:

//Build base URL: 
$userid=$_GET['userid']; 
$startdate=/*Beginning of today's month*/; 
$enddate=/*End of today's month*/; 
$url='http://www.example.com?userid='.$userid.'&startdate='.$startdate.'&enddate='.$enddate; 

//Set JSON variables: 
$get=file_get_contents($url); 
$json=json_decode($get); 

//Set loop variables: 
$value=0; 
$month=0; 

/*For each month from today backwards{ 
    $number=$json->integer; 
    if($number!=null){ 
     $value=$value+$number; 
     $month=$month+1; 
    }else{ 
     break; 
    } 
} 
echo $value; 
echo $month; 
*/ 

私が問題を抱えている部分は、4番目の部分の始まりです。今日の月の範囲から始まり$ numberを取得し、前の月を繰り返すループを、nullを返す月に達するまで実行するにはどうすればよいですか?

+0

'はmktime()、それはあなたが単に-1ヶ月で、それが割り出しを可能にするよう、'、このような状況ではかなり便利です年間の変化と日とそのような。また、 'strtotime(" now - $ m month ")'のように、もっと読みやすい日付の変更を扱うのが好きな人はheheheです。 – IncredibleHat

答えて

0

DateTimeオブジェクトを使用すると、一度に1monthを減算して逆算する方法(この場合はsub)を使用できます。配列は月/日付を格納し、URLは可変カウンタを使用して構築されます$i

当初、これは20yearsの最大範囲を持っていましたが、これは変更するのは簡単です。

$df='Y-m-d'; 
$userid=$_GET['userid']; 

$timezone=new DateTimeZone('Europe/London'); 
$interval=new DateInterval('P1M'); 

$ts=date($df, strtotime(date('Y-m-1'))); 
$tf=date($df, strtotime(date('Y-m-1'). ' - 20 years')); 

$start=new DateTime($ts, $timezone); 
$end=new DateTime($tf, $timezone); 

$dates=array(); 
$i=0; 

while($start->sub($interval) > $end){ 
    $dates[]=$start->format($df); 
    if($i > 1){ 

     $startdate=$dates[ $i - 1 ]; 
     $enddate=$dates[ $i ]; 
     $url='http://www.example.com?userid='.$userid.'&startdate='.$startdate.'&enddate='.$enddate; 
     echo $url,'<br />'; 

     /* uncomment when happy with mechanism */ 
     /* 

     $data=file_get_contents($url); 
     if($data)) { 
      $json=json_decode($data); 
      #process..... 
      break; 
     } 
     */ 
    } 
    $i++; 
} 

のstrtotime()とはmktime()関数を使用すると、ループあなたがNullの結果を得ることができるまでしながら使用することにより、出力

http://www.example.com?userid=bobodaclown&startdate=2017-10-01&enddate=2017-09-01 
http://www.example.com?userid=bobodaclown&startdate=2017-09-01&enddate=2017-08-01 
http://www.example.com?userid=bobodaclown&startdate=2017-08-01&enddate=2017-07-01 
http://www.example.com?userid=bobodaclown&startdate=2017-07-01&enddate=2017-06-01 
http://www.example.com?userid=bobodaclown&startdate=2017-06-01&enddate=2017-05-01 
http://www.example.com?userid=bobodaclown&startdate=2017-05-01&enddate=2017-04-01 
http://www.example.com?userid=bobodaclown&startdate=2017-04-01&enddate=2017-03-01 
0

のスニペット。以下のコードは、5ヶ月間5つのURLを表示します。それに応じて条件を変更します。

// define $i 
$i=0; 
$userid = '343';//$_GET['userid']; //dont forget to replace with userid 
do{ 
    $timestring = strtotime("now -$i month"); 
    //get Month 
    $month = date('m',$timestring); 
    //get Year 
    $year = date('Y',$timestring); 
    // First date Month and Year 
    $startdate = date('d-m-Y', mktime(0, 0, 0, $month, 1, $year)); 
    // Last date Month and Year 
    $enddate = date('d-m-Y', mktime(0, 0, 0, $month+1, 0,$year)); 

    $url='http://www.example.com?userid='.$userid.'&startdate='.$startdate.'&enddate='.$enddate; 
    // commenting your code 
    //Set JSON variables: 
    //$get=file_get_contents($url); 
    //$json=json_decode($get); 
    // $number=$json->integer; 
    echo $url; 
    echo "\n"; 
    $i++; 
}while ($i!=5); // change while condition according to your requirement. while ($number!=null) 

出す:

http://www.example.com?userid=343&startdate=01-12-2017&enddate=31-12-2017 
http://www.example.com?userid=343&startdate=01-11-2017&enddate=30-11-2017 
http://www.example.com?userid=343&startdate=01-10-2017&enddate=31-10-2017 
http://www.example.com?userid=343&startdate=01-09-2017&enddate=30-09-2017 
http://www.example.com?userid=343&startdate=01-08-2017&enddate=31-08-2017 
関連する問題