2015-05-26 28 views
1

我有一個JSON文件,其中包含各個時間點的特定值的值。目前,它很混亂,幷包含很多的重複。我想通過將重複項組織到一個日期範圍來清理它。如何從數組中創建日期範圍?

JSON文件的結構如下:

[ 
    { 
     "value": ".298", 
     "time": "21 May 2015 1:18:06 AM" 
    }, 
    [...] 
    { 
     "value": ".298", 
     "time": "21 May 2015 12:15:07 PM" 
    }, 
    { 
     "value": ".046", 
     "time": "21 May 2015 12:20:08 PM" 
    }, 
    [...] 
    { 
     "value": ".046", 
     "time": "21 May 2015 12:30:15 PM" 
    }, 
    { 
     "value": ".004", 
     "time": "22 May 2015 8:55:06 PM" 
    }, 
    [...] 
    { 
     "value": ".004", 
     "time": "22 May 2015 9:45:06 PM" 
    }  
] 

而且想我的輸出:

21/05 01:19:06 AM to 21/05 12:15:07 PM, value: .298 
21/05 12:25:08 PM to 21/05 12:30:15 PM, value: .046 
22/05 09:40:06 PM to 22/05 09:45:06 PM, value: .004 

這是我的代碼至今:

foreach ($json as $sub) { 
    if (isset($value)) { 
     if ($value == $sub['value'] || $value == NULL) { 
      $range[$i][] = [strtotime($sub['time']), $sub['value']]; 
     } 
     else { 
      $i++; 
     } 
    } 
    $value = $sub['value']; 
} 

foreach ($range as $daterange) { 
    $begin = $daterange[0][0]; 
    $end = $daterange[count($daterange)-1][0]; 
    printf('%s to %s, value: %s', 
     date('d/m h:i:s A', $begin), 
     date('d/m h:i:s A', $end), 
     $daterange[0][1] 
    ); 
    echo "<br/>"; 
} 

我發佈的代碼大部分工作,但在處理包含空值的大數組時,它似乎有問題。因爲重複的內容仍然存在。

我該如何解決?我敢肯定這個hacky方法可以使用DateTime類改進更多;我希望有人能告訴我它是如何完成的。

+0

你能表現出你提到的空值是如何出現的例子嗎? –

+0

*我想輸出: 21/05 01:19:06 AM to 21/05 12:15:07 PM,value:.298 *你在哪裏抽時間? – splash58

+0

@ splash58:不確定你的意思。 –

回答

0

我沒有格式化輸出。我認爲你可以自己

$array = json_decode($str); 

$starttime = $endtime = $array[0]->time; 
$value = $array[0]->value; 

foreach ($array as $item) 
    if ($item->value == $value) $endtime = $item->time; 
    else { 
     echo "$starttime to $endtime, value: $value\n"; 
     $starttime = $endtime = $item->time; 
     $value = $item->value; 
    } 
    echo "$starttime to $endtime, value: $value\n"; 

與有關輸出數據:

21 May 2015 1:18:06 AM to 21 May 2015 12:15:07 PM, value: .298 
21 May 2015 12:20:08 PM to 21 May 2015 12:30:15 PM, value: .046 
22 May 2015 8:55:06 PM to 22 May 2015 9:45:06 PM, value: .004