2

ユーザービューを記録したウェブサイト統計のデータベースがあります。読み込んで JSON にエクスポートしたいと思います。私はそれを行うことができますが、それらを特定の形式に書き直したいと思います。私は何をすべきか?

予期されるJSONコード: //http://www.highcharts.com/samples/data/jsonp.php?filename=aapl-c.json&callback= から発生

callback(/* AAPL historical OHLC data from the Google Finance API */
[
/* Sep 2005 */
[1127088000000,52.64],
[1127174400000,53.19],
[1127260800000,52.11],
[1127347200000,51.90],
[1127433600000,53.20],
[1127692800000,53.84],
[1127779200000,53.44],
[1127865600000,51.08],
[1127952000000,52.34],
[1128038400000,53.61],
...
]);

これが私のコードです:

$sql_viewer="select sum(vwr_id) as num,vwr_date from car_viewer where vwr_tid='$_tid' group by year(vwr_date) desc, month(vwr_date) desc";
$result_viewer=mysql_db_query($dbname,$sql_viewer);
while($rec_viewer=mysql_fetch_array($result_viewer)){
    $_viewerDate=$rec_viewer['vwr_date'];
    $_viewerNum=$rec_viewer['num'];
    foreach($rec_viewer as $key=>$val){
        $arr[$key]=$val;
    }
    $main_arr[]=$arr;
}
echo json_encode($main_arr);

結果の JSON:

[{"0":"221944676","num":"221944676","1":"2012-09-01 00:20:08","vwr_date":"2012-09-01 00:20:08"},{"0":"66772926","num":"66772926","1":"2012-08-09 23:35:04","vwr_date":"2012-08-09 23:35:04"},{"0":"609","num":"609","1":"2012-02-20 22:40:29","vwr_date":"2012-02-20 22:40:29"}]

問題は、結果の JSON を上記の期待される形式に書き直すにはどうすればよいかということです。よろしく、

4

3 に答える 3

1

更新:コンマと改行を末尾に付けずに回答を更新しました。

echo代わりに独自のものを使用してくださいjson_encode

交換:

echo json_encode($main_arr);

と:

$final = "";
foreach ($main_arr as $key => $value)
    $final .= "[$key, $value],\n";
echo substr($final, 0, -3);
于 2012-09-17T18:20:54.417 に答える
1

コードの問題は、内部配列に数値インデックスと整数インデックスの両方があることです。

$sql_viewer="select sum(vwr_id) as num,vwr_date from car_viewer where vwr_tid='$_tid' group by year(vwr_date) desc, month(vwr_date) desc";
$result_viewer=mysql_db_query($dbname,$sql_viewer);
while($rec_viewer=mysql_fetch_array($result_viewer)){
    $_viewerDate=$rec_viewer['vwr_date'];
    $_viewerNum= intval ( $rec_viewer['num'] );
    // Create an array with just integer indexes
    $main_arr[]=array(strtotime($_viewerDate) * 1000, $_viewerNum);
}

echo 'callback(' . json_encode($main_arr) . ');';

、上記のコードは、内部配列に整数インデックスのみを持たせます

于 2012-09-17T18:40:20.803 に答える
0

最後に問題を見つけました - グラフを表示できません。私のSQLが間違っていたからです。そのため、結果は正しくレンダリングされません。以下は作業中のものです。@Juan Mendesに感謝します。どんな助けでも。

$sql_vwr="select vwr_date from car_viewer where vwr_tid='$_tid' group by date(vwr_date) order by date(vwr_date) asc";
$result_vwr=mysql_db_query($dbname,$sql_vwr);
while($rec_vwr=mysql_fetch_array($result_vwr)){
    $_vwrDate=date("Y-m-d",strtotime($rec_vwr['vwr_date']));
    $_vwrDateTime=date("Y-m-d H:i:s",strtotime($rec_vwr['vwr_date']));

    //get num by date
    $sql_nVwr="select vwr_id from car_viewer where vwr_date like '$_vwrDate%' and vwr_tid='$_tid'";
    $result_nVwr=mysql_db_query($dbname,$sql_nVwr);
    $_nVwr=mysql_num_rows($result_nVwr);

    // Create an array with just integer indexes
    $main_arr[]=array(strtotime($_vwrDateTime) *1000, (int)$_nVwr);
}   
echo $_c .'(' . json_encode($main_arr) . ');';
于 2012-09-18T04:43:58.450 に答える