2016-02-18 107 views
1

我已經創建了一個腳本來跟蹤我網站上的訪問者,現在我想在帶有JSON的Google折線圖中顯示每天的訪問者數量。PHP數組以正確的JSON格式?

這是一些PHP代碼我寫在陣列中以顯示訪問者的這一天的日期和金額:

$dateQuery = $db->prepare("SELECT date FROM tracked"); 
$dateQuery->execute(); 
$rows = $dateQuery->fetchAll(PDO::FETCH_ASSOC); 
$array = array(); 
foreach ($rows as $row) { 
    $day = explode(' ', $row['date']); 
    if (!key_exists($day[0], $array)) { 
     $array[$day[0]] = 0; 
    } 
    $array[$day[0]] += 1; 
} 

這是輸出時我print_r陣列:

array output

現在這個輸出在谷歌圖表API中工作我需要的JSON格式是這樣的:

[["2016-02-18",6],["2016-02-17",5]] 

相反,我得到這個與json_encode($陣列):

{"2016-02-17":5,"2016-02-18":6} 

我現在有數組和循環的一個基本的瞭解,但我似乎不能認爲解決我的問題的解決方案的。

+2

不要使用日期作爲關鍵。製作一個由日期和訪客數組成的數組。 –

回答

1

您可以輕鬆地優化您的查詢擺在首位,使您的數據完全一樣,你需要避免不必要的循環後:

$dateQuery = $db->prepare("SELECT 
     DATE(date) AS date, 
     COUNT(tracked.id) AS count 
    FROM tracked 
    GROUP BY DATE(date)"); 
$dateQuery->execute(); 
$rows = $dateQuery->fetchAll(PDO::FETCH_ASSOC); 

(我不知道,如果你的表有一個「 ID「列,但我相信你明白了)。然後就像

$result = array(); 
foreach ($rows as $row) { 
    $result[] = array($row['date'], $row['count']); 
} 
echo json_encode($result); 
+0

方便的代碼,但現在它回聲是這樣的:[「2016-02-17」,「1」],[「2016-02-17」,「1」]。訪客需要按日期分組。解決辦法是什麼? – Ramon

+0

我修改了我的答案,因爲它現在值得。必須由'DATE(日期)'而不是簡單地'日期'來分組。 –

1

只寫了一些簡單的代碼來轉換你的數組。

<?php 
$array = []; 
$array['2016-01-17'] = 7; 
$array['2016-02-18'] = 6; 

echo json_encode($array); // output is: {"2016-01-17":7,"2016-02-18":6} 

$arrayInRightFormat = []; 

foreach ($array as $i => $value) { 
    $arrayInRightFormat[] = [$i, $value]; 
} 

echo json_encode($arrayInRightFormat); // output is: [["2016-01-17",7],["2016-02-18",6]] 

事實上,你使用你的數組就像是一個帶有String鍵的HashMap,所以它轉換爲字典。

更好的想法是讓mysql數據庫聚合數據,然後直接將其轉換爲正確的格式!

<?php 
$dateQuery = $db->prepare("SELECT DATE(date) as day,count(*) as hits FROM tracked GROUP BY DATE(date)"); 
$dateQuery->execute(); 
$rows = $dateQuery->fetchAll(PDO::FETCH_ASSOC); 

$array = array(); 
foreach ($rows as $row) { 
    $array[] = [$row['day'], $row['hits']]; 
} 

echo json_encode($array); // output is: [["2016-01-17",7],["2016-02-18",6]] 
+0

太棒了!它做了詭計。不幸的是,Google Charts API現在認爲我的日期是一個字符串。你知道這個解決方案嗎?它只接受類似這樣的內容:[新日期(2016,2,17),5](5是訪問者數量)。 – Ramon

+0

你可以通過javascript將它轉換爲新的日期('2011-04-11')。如果你在js:for(i = 0; i Kordi