私はGoogle Charts Line Graph APIを使ってDateとNumberのグラフを生成しています。PHP usort()またはCarbonがソートされた配列を正しく返しません
PHPスクリプトからAjax経由でGoogle Chartに配列を渡しています。
しかし、Google Chartsがループバックしているように見えることがあります。
私は、Googleのチャートは、それが(関係なく、日付の)受信JSON配列の順序に依存しているためであると考えています。だからPHPで送信する前にこの配列を日付でソートしようとしています。私はこれを達成するためにusort()の内部の関数を使用していて、Carbon extensionを使って日付を比較しています。通常のソートに 2017-03-28
、2017-03-29
、2017-04-01
、2017-03-30
、2017-04-02
、2017-03-31
、2017-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のチャートに返される配列である:これが起こっされるだろう、なぜ
誰でも知っていますか?おそらく代わりに配列データをソートする
これは驚くべき、全く私の心を交差していない、私は今それをしようとします - となってだからPHPを稼働させることに一心的です-_- –
うん、解決しました - ありがとう! –