2017-07-06 1 views
0

JSONファイルに依存する日常的な日付ループを構築したいと思います。 ループをグラフに合わせる必要があります。 JSONファイルの日付が必ずしも順不同であるという問題(営業日かどうかによって異なる)私はJSONを完了したいという意味で毎日(営業日であるかどうかにかかわらず)表示したい日付のループ。ループ日付Chart - PHP JSONのフォロワー

例として、例を示します。 JSONファイルは、私がしたい

[ "1982年11月12日"、0.4193]、[ "1982年11月20日"、0.3672]、

ことを私が表示されます場合は 1982 "[、私のグラフ

[ "1982年11月12日"、0.4193]、[ "1982年11月13日"、0.4193]、[ "1982年11月14日"、0.4193]の中にそれを表示します「1982-11-16」、「0.4193」、「1982-11-17」、「0.4193」、「1982-11-18」、「0.4193」、「1982-11-17」、 -19 "、0.4193]、[" 1982-11-20 "、0.3672]

要約すると、日付が連続していない場合は、ループを連続した日付にします。以前の日付と同じ値を与えることに加えて。 TIA


JSONファイル:

[ 
    { "id":"XXX","dateTimeRanges":{}, 
     "price":[ 
       {"date":"1982-11-12", "value":0.5781}, 
       {"date":"1982-11-19","value":0.5513}, 
       {"date":"1982-11-26","value":0.5179}, 
       {"date":"1982-12-03","value":0.567}, 
       {"date":"1982-12-10","value":0.5223}, 
       {"date":"1982-12-17","value":0.5379}, 
       {"date":"1982-12-24","value":0.5714}, 
       {"date":"1982-12-31","value":0.5335}, 
       {"date":"1983-01-07","value":0.4911}, 
       {"date":"1983-01-14","value":0.5893}, 
       {"date":"1983-01-21","value":0.6674} 
       ]}] 

PHPファイル:ここで

$json = file_get_contents($url); 
//$json = json_encode($json, true); 

$json_a = json_decode($json, true); 
//print_r($json_a); 
$n = count($json_a[0]['price']); 
?> 
<script type="text/javascript"> 
window.profileData = { 
     "stats": [ 
<?php 
    for($i=0;$i<$n;$i++){ 
     $date = trim($json_a[0]['price'][$i]['date']); 
     $value = trim($json_a[0]['price'][$i]['value']); 
     $tomorrow = date("Y-m-d", strtotime('+1 day', strtotime($date))); 

     if($i > 0 and trim($json_a[0]['price'][$i+1]['date']) !== $tomorrow){ 
?> 
    ["<?php echo $tomorrow;?>", <?php echo $value;?>],   
    <?php }else{ ?> 
    ["<?php echo $date;?>", <?php echo $value;?>], 
<?php }}?>], 
     "profile": { 
       "commonName": "<?php echo trim($name);?>", 
       } 
     }; 
    </script> 
+0

これはjavascriptで行うことができます。これを例を見てください:https://stackoverflow.com/questions/23795522/how-to-enumerate-dates-between-two-dates-in-moment – Esteban

+0

なぜあなたはPHPでそれを行うことができないのですか? @Esteban – AnnaLA

+0

私はあなたがPHPでそれをすることができないと言わなかった、私はPHPでJSコードを生成する代わりに、JSで直接行うことができますと言った。 – Esteban

答えて

1

は、私はそれを行うだろう方法は次のとおりです。この入力の

<?php 
$data = json_decode(file_get_contents($url)); 

$json = []; $prev = null; 
foreach ($data[0]->price as $item) 
{ 
    while (isset($prev) && strtotime($item->date) != ($prev=strtotime('+1 day', $prev))) 
     $json []= [date('Y-m-d', $prev), $item->value]; 

    $json []= [$item->date, $item->value]; 

    $prev = strtotime($item->date); 
} 
?> 

<script type="text/javascript">window.profileData = <?=json_encode($json)?></script> 

$ data = json_decode( '[{"id": "XXX"、 "dateTimeRanges":{}、 "price":[{"date": "1982-11-12"、 "value":0.5781 {date}:{1982-11-26}、{value} {0.5179} {{date} {1982-11-19}、{value} {日付}: "1982-12-10"、 "値":0.5223}、{"日付": "1982-12-17"、 "値":0.5379 {date}:{1982-12-24}、{value}:0.5714}、{"date": "1982-12-31"、 "value":0.5335}、{"date" 「日付」:「1983-01-14」、「値」:0.5893、{「日付」:「1983-01-21」、「値」:0.6674 }]}] ');

これは生成:

window.profileData = [[ "1982年11月12日"、0.5781]、[ "1982年11月13日"、0.5513]、[ "1982年11月14日1982-11-18]、[1982-11-17]、[1982-11-16]、[0.5513]、[1982-11-17]、[0.5513] [1982-11-21]、[1982-11-21]、[1982-11-22]、[0.5173]、[1982-11-19]、[0.5513] [1982-11-23、0.5179]、[1982-11-24]、[0.5179]、[1982-11-25]、[0.5179]、[1982-11-26]、[0.5179] "1982-11-27"、0.567]、["1982-11-28"、0.567]、["1982-11-29"、0.567]、[1982-11-30 "、0.567]、[1982年「1982-12-02」、「0.567」、「1982-12-03」、「0.567」、「1982-12-04」、「0.5223」、「1982-12-03」、 -05 "、0.5223]、[" 1982-12-06 "、0.5223]、[" 1982-12-07 "、0.5223]、[" 1982-12-08 "、0.5223]、[" 1982-12-09 "、0.5223]、[" 1982-12-10 "、0.5223 ]、「1982-12-11」、「0.5379」、「1982-12-12」、「0.5379」、「1982-12-13」、「0.5379」、「1982-12-14」、「0.5379」、 [1982-12-17]、[1982-12-18]、[0.5279]、[1982-12-16]、[ 1982-12-19 "、0.5714]、[" 1982-12-20 "、0.5714]、[" 1982-12-21 "、0.5714]、[" 1982-12-22 "、0.5714]、[" 1982- [1982-12-25]、[1982-12-25]、[1982-12-26]、[0.5314]、[1982-12-25 "、0.5335] 「1982-12-29」、「1982-12-29」、「1982-12-29」、「0.5335」、「1982-12-29」、「0.5335」、「1982-12-30」、「0.5335」、 、0。533]、[1983-01-01、0.4911]、[1983-01-02、0.4911]、[1983-01-03]、[0.4911]、[1983-01-04]、[0.4911] 「1983-01-05」、「0.4911」、「1983-01-06」、「0.4911」、「1983-01-07」、「0.4911」、「1983-01-08」、「0.5893」、 "1983-01-11"、0.5893]、["1983-01-10"、0.5893]、[1983-01-11 "、0.5893]、[1983-01-12"、0.5893]、[1983-01-09 " 「1983-01-15」、「0.6674」、「1983-01-16」、「0.6674」、「1983-01-15」、「1983-01-14」、 「1983-01-19」、「0.6674」、「1983-01-18」、「0.6674」、「1983-01-19」、「0.6674」、「1983-01-20」、「0.6674」、「1983-01-19 "、0.6674]]
+0

パーフェクト。たくさんの@シジョンありがとう – AnnaLA