2017-04-20 13 views
1

私はGoogle Charts Line Graph APIを使ってDateとNumberのグラフを生成しています。PHP usort()またはCarbonがソートされた配列を正しく返しません

PHPスクリプトからAjax経由でGoogle Chartに配列を渡しています。

しかし、Google Chartsがループバックしているように見えることがあります。

Dates March 30 is looping back

私は、Googleのチャートは、それが(関係なく、日付の)受信JSON配列の順序に依存しているためであると考えています。だからPHPで送信する前にこの配列を日付でソートしようとしています。私はこれを達成するためにusort()の内部の関数を使用していて、Carbon extensionを使って日付を比較しています。通常のソートに 2017-03-282017-03-292017-04-012017-03-302017-04-022017-03-312017-04-03戻る:

// Sort by Date 
usort(
    $rows, 
    function ($a, $b) { 
     // 'date' Index in $row array 
     $date = 0; 

     // Match for anything within Brackets (only match should be 'Date(xxx)' column of $row); 
     preg_match('#\((.*?)\)#', $a[$date], $a_matches); 
     preg_match('#\((.*?)\)#', $b[$date], $b_matches); 

     // If $a and $b contain Dates (as assumed by above) ie. not header/information rows 
     if (isset($a_matches[1]) && isset($b_matches[1])) { 
      // Convert the strings to Dates and increase 
      $a_date = Carbon::parse(str_replace(', ', '-', $a_matches[1]))->addMonth(); 
      $b_date = Carbon::parse(str_replace(', ', '-', $b_matches[1]))->addMonth(); 

      // If $a less than $b, return -1 (reduce $a in order) otherwise 1 (promote $a in order) 
      if ($a_date->lt($b_date)) return -1; 
      else return 1; 
     } 

     // Else return 0 (no change in order) 
     return 0; 
    } 
); 

return $rows; 

しかし、これは、そうでなければ99%正しい、などの場合を含む配列を返すされます。

これは、Googleのチャートに返される配列である:これが起こっされるだろう、なぜ

array returned via ajax

誰でも知っていますか?おそらく代わりに配列データをソートする

答えて

2

、描画する前に、Googleのデータテーブルをソートする方が簡単... ​​

data.sort([{column: 0}]); 

chart.draw(data); 
+0

これは驚くべき、全く私の心を交差していない、私は今それをしようとします - となってだからPHPを稼働させることに一心的です-_- –

+0

うん、解決しました - ありがとう! –

関連する問題