JSON php提取数据(其中一条语句为真)

时间:2018-05-16 08:34:47

标签: php json parsing

我试图从天气预报API请求(JSON输出)中捕获特定数据。该请求为我提供了接下来3天的数据,但我只需要第二天。这是输出的片段:

array (
  'cod' => '200',
  'message' => 0.00259999999999999988065102485279567190445959568023681640625,
  'cnt' => 40,
  'list' => 
  array (
    0 => 
    array (
      'dt' => 1526461200,
      'main' => 
      array (
        'temp' => 292.93000000000000682121026329696178436279296875,
        'temp_min' => 292.05000000000001136868377216160297393798828125,
        'temp_max' => 292.93000000000000682121026329696178436279296875,
        'pressure' => 1019.259999999999990905052982270717620849609375,
        'sea_level' => 1029.170000000000072759576141834259033203125,
        'grnd_level' => 1019.259999999999990905052982270717620849609375,
        'humidity' => 71,
        'temp_kf' => 0.88000000000000000444089209850062616169452667236328125,
      ),
      'weather' => 
      array (
        0 => 
        array (
          'id' => 802,
          'main' => 'Clouds',
          'description' => 'scattered clouds',
          'icon' => '03d',
        ),
      ),
      'clouds' => 
      array (
        'all' => 36,
      ),
      'wind' => 
      array (
        'speed' => 4.20000000000000017763568394002504646778106689453125,
        'deg' => 37.00240000000000151203494169749319553375244140625,
      ),
      'sys' => 
      array (
        'pod' => 'd',
      ),
      'dt_txt' => '2018-05-16 09:00:00',
    ),
    1 => 
    array (
      'dt' => 1526472000,
      'main' => 
      array (
        'temp' => 293.6100000000000136424205265939235687255859375,
        'temp_min' => 292.95800000000002683009370230138301849365234375,
        'temp_max' => 293.6100000000000136424205265939235687255859375,
        'pressure' => 1019.799999999999954525264911353588104248046875,
        'sea_level' => 1029.65000000000009094947017729282379150390625,
        'grnd_level' => 1019.799999999999954525264911353588104248046875,
        'humidity' => 66,
        'temp_kf' => 0.66000000000000003108624468950438313186168670654296875,
      ),
      'weather' => 
      array (
        0 => 
        array (
          'id' => 803,
          'main' => 'Clouds',
          'description' => 'broken clouds',
          'icon' => '04d',
        ),
      ),
      'clouds' => 
      array (
        'all' => 56,
      ),
      'wind' => 
      array (
        'speed' => 5.79999999999999982236431605997495353221893310546875,
        'deg' => 38.0009000000000014551915228366851806640625,
      ),
      'sys' => 
      array (
        'pod' => 'd',
      ),
      'dt_txt' => '2018-05-16 12:00:00',
    )

我试图让所有人都能得到所有'价值在哪里' dt_txt'从第二天凌晨0点开始到第二天的第二天凌晨0点。 现在我使用以下php代码而不检查dt_txt:

<?php
$url = "http://api.openweathermap.org/data/2.5/forecast?q=D%C3%BClmen,de&mode=json";
$response = file_get_contents($url);

$obj = json_decode($response);
$t = 0;
$regen = 0;
$regendiv = 0;

  for($i=0; $i < 10; $i++) {

    $fg = $obj->list[$i]->clouds->all;

    $regen += $fg;
   }
   echo $regen;
 ?>

我的代码要求我在特定时间(例如接近午夜)运行请求,以便抓住所有&#39;第二天的价值观。有没有办法检查&#39; dt_text&#39; =第二天?

我的想法会是这样的:

    for($i=0; $i < 10; $i++) {

    $fg = $obj->list[$i]->clouds->all;

    if (strpos($obj->list[$i]->dt_txt), $date){
    $regen += $fg;
    }
**//But how do I get $date to be the following day**
   }
   echo $regen;
 ?>

1 个答案:

答案 0 :(得分:0)

我能够这样解决:

<?php
$nextWeek = time() + (24 * 60 * 60);
$morgen = date('Y-m-d', $nextWeek);


$url = "http://api.openweathermap.org/data/2.5/forecast?q=D%C3%BClmen,de&mode=json";
$response = file_get_contents($url);
$obj = json_decode($response);


$quote = 0;

   for($i=0; $i < 14; $i++) {


    if (strpos($obj->list[$i]->dt_txt, $morgen) !== false) {
    $fg = $obj->list[$i]->clouds->all;
    if($fg > 80) { $t = 1; }
    $regen += $fg;
    $quote++;


}


   }
  $regendiv = $regen / $quote;

?>

可能不是最漂亮的方式,但它完成了工作。