2015-09-07 74 views
-1

我想寫這將我的數組轉換到JSON數據莫里斯面積圖的原始數組從數據庫中抽取要使用的功能是波紋管:PHP:如何從這個數組創建一個Morris Area圖表?

Array 
(
    [0] => Array 
     (
      [tracking_date] => 2015-08-29 
      [tracking_isbot] => 0 
     ) 

    [1] => Array 
     (
      [tracking_date] => 2015-08-29 
      [tracking_isbot] => 0 
     ) 

    [2] => Array 
     (
      [tracking_date] => 2015-08-29 
      [tracking_isbot] => 0 
     ) 

    [3] => Array 
     (
      [tracking_date] => 2015-08-29 
      [tracking_isbot] => 0 
     ) 

    [4] => Array 
     (
      [tracking_date] => 2015-08-29 
      [tracking_isbot] => 0 
     ) 

    [5] => Array 
     (
      [tracking_date] => 2015-08-29 
      [tracking_isbot] => 0 
     ) 

    [6] => Array 
     (
      [tracking_date] => 2015-08-29 
      [tracking_isbot] => 0 
     ) 

    [7] => Array 
     (
      [tracking_date] => 2015-08-29 
      [tracking_isbot] => 1 
     ) 

    [8] => Array 
     (
      [tracking_date] => 2015-08-29 
      [tracking_isbot] => 1 
     ) 

    [9] => Array 
     (
      [tracking_date] => 2015-08-29 
      [tracking_isbot] => 1 
     ) 

    [10] => Array 
     (
      [tracking_date] => 2015-08-29 
      [tracking_isbot] => 1 
     ) 

    [11] => Array 
     (
      [tracking_date] => 2015-08-29 
      [tracking_isbot] => 0 
     ) 

    [12] => Array 
     (
      [tracking_date] => 2015-08-29 
      [tracking_isbot] => 0 
     ) 

    [13] => Array 
     (
      [tracking_date] => 2015-08-29 
      [tracking_isbot] => 1 
     ) 

    [14] => Array 
     (
      [tracking_date] => 2015-08-29 
      [tracking_isbot] => 1 
     ) 

    [15] => Array 
     (
      [tracking_date] => 2015-08-30 
      [tracking_isbot] => 0 
     ) 

    [16] => Array 
     (
      [tracking_date] => 2015-08-30 
      [tracking_isbot] => 0 
     ) 

    [17] => Array 
     (
      [tracking_date] => 2015-08-30 
      [tracking_isbot] => 0 
     ) 

    [18] => Array 
     (
      [tracking_date] => 2015-08-30 
      [tracking_isbot] => 0 
     ) 

    [19] => Array 
     (
      [tracking_date] => 2015-08-30 
      [tracking_isbot] => 0 
     ) 

    [20] => Array 
     (
      [tracking_date] => 2015-08-30 
      [tracking_isbot] => 0 
     ) 

    [21] => Array 
     (
      [tracking_date] => 2015-08-30 
      [tracking_isbot] => 0 
     ) 

    [22] => Array 
     (
      [tracking_date] => 2015-08-30 
      [tracking_isbot] => 0 
     ) 

    [23] => Array 
     (
      [tracking_date] => 2015-08-30 
      [tracking_isbot] => 0 
     ) 

    [24] => Array 
     (
      [tracking_date] => 2015-08-30 
      [tracking_isbot] => 0 
     ) 

    [25] => Array 
     (
      [tracking_date] => 2015-08-30 
      [tracking_isbot] => 0 
     ) 

    [26] => Array 
     (
      [tracking_date] => 2015-08-30 
      [tracking_isbot] => 1 
     ) 

    [27] => Array 
     (
      [tracking_date] => 2015-08-30 
      [tracking_isbot] => 1 
     ) 

    [28] => Array 
     (
      [tracking_date] => 2015-08-30 
      [tracking_isbot] => 1 
     ) 

    [29] => Array 
     (
      [tracking_date] => 2015-08-30 
      [tracking_isbot] => 0 
     ) 

    [30] => Array 
     (
      [tracking_date] => 2015-08-30 
      [tracking_isbot] => 0 
     ) 

    [31] => Array 
     (
      [tracking_date] => 2015-08-30 
      [tracking_isbot] => 0 
     ) 

    [32] => Array 
     (
      [tracking_date] => 2015-08-30 
      [tracking_isbot] => 0 
     ) 

    [33] => Array 
     (
      [tracking_date] => 2015-08-30 
      [tracking_isbot] => 1 
     ) 

    [34] => Array 
     (
      [tracking_date] => 2015-08-30 
      [tracking_isbot] => 0 
     ) 

    [35] => Array 
     (
      [tracking_date] => 2015-08-30 
      [tracking_isbot] => 0 
     ) 

    [36] => Array 
     (
      [tracking_date] => 2015-08-30 
      [tracking_isbot] => 1 
     ) 

    [37] => Array 
     (
      [tracking_date] => 2015-08-30 
      [tracking_isbot] => 0 
     ) 

    [38] => Array 
     (
      [tracking_date] => 2015-08-30 
      [tracking_isbot] => 1 
     ) 

    [39] => Array 
     (
      [tracking_date] => 2015-08-31 
      [tracking_isbot] => 0 
     ) 

    [40] => Array 
     (
      [tracking_date] => 2015-08-31 
      [tracking_isbot] => 0 
     ) 

    [41] => Array 
     (
      [tracking_date] => 2015-08-31 
      [tracking_isbot] => 0 
     ) 

    [42] => Array 
     (
      [tracking_date] => 2015-08-31 
      [tracking_isbot] => 1 
     ) 

    [43] => Array 
     (
      [tracking_date] => 2015-08-31 
      [tracking_isbot] => 0 
     ) 

    [44] => Array 
     (
      [tracking_date] => 2015-08-31 
      [tracking_isbot] => 0 
     ) 

    [45] => Array 
     (
      [tracking_date] => 2015-08-31 
      [tracking_isbot] => 0 
     ) 

    [46] => Array 
     (
      [tracking_date] => 2015-08-31 
      [tracking_isbot] => 1 
     ) 

    [47] => Array 
     (
      [tracking_date] => 2015-08-31 
      [tracking_isbot] => 1 
     ) 

    [48] => Array 
     (
      [tracking_date] => 2015-08-31 
      [tracking_isbot] => 1 
     ) 

    [49] => Array 
     (
      [tracking_date] => 2015-08-31 
      [tracking_isbot] => 0 
     ) 

    [50] => Array 
     (
      [tracking_date] => 2015-08-31 
      [tracking_isbot] => 0 
     ) 

    [51] => Array 
     (
      [tracking_date] => 2015-08-31 
      [tracking_isbot] => 0 
     ) 

    [52] => Array 
     (
      [tracking_date] => 2015-08-31 
      [tracking_isbot] => 0 
     ) 

    [53] => Array 
     (
      [tracking_date] => 2015-08-31 
      [tracking_isbot] => 0 
     ) 

    [54] => Array 
     (
      [tracking_date] => 2015-08-31 
      [tracking_isbot] => 1 
     ) 

    [55] => Array 
     (
      [tracking_date] => 2015-08-31 
      [tracking_isbot] => 1 
     ) 

    [56] => Array 
     (
      [tracking_date] => 2015-08-31 
      [tracking_isbot] => 1 
     ) 

    [57] => Array 
     (
      [tracking_date] => 2015-08-31 
      [tracking_isbot] => 1 
     ) 

    [58] => Array 
     (
      [tracking_date] => 2015-08-31 
      [tracking_isbot] => 0 
     ) 

    [59] => Array 
     (
      [tracking_date] => 2015-08-31 
      [tracking_isbot] => 0 
     ) 

    [60] => Array 
     (
      [tracking_date] => 2015-08-31 
      [tracking_isbot] => 0 
     ) 

    [61] => Array 
     (
      [tracking_date] => 2015-08-31 
      [tracking_isbot] => 0 
     ) 

    [62] => Array 
     (
      [tracking_date] => 2015-08-31 
      [tracking_isbot] => 0 
     ) 

    [63] => Array 
     (
      [tracking_date] => 2015-08-31 
      [tracking_isbot] => 0 
     ) 

    [64] => Array 
     (
      [tracking_date] => 2015-08-31 
      [tracking_isbot] => 0 
     ) 

    [65] => Array 
     (
      [tracking_date] => 2015-08-31 
      [tracking_isbot] => 1 
     ) 

    [66] => Array 
     (
      [tracking_date] => 2015-08-31 
      [tracking_isbot] => 1 
     ) 

    [67] => Array 
     (
      [tracking_date] => 2015-08-31 
      [tracking_isbot] => 1 
     ) 

    [68] => Array 
     (
      [tracking_date] => 2015-08-31 
      [tracking_isbot] => 0 
     ) 

    [69] => Array 
     (
      [tracking_date] => 2015-08-31 
      [tracking_isbot] => 0 
     ) 

    [70] => Array 
     (
      [tracking_date] => 2015-08-31 
      [tracking_isbot] => 0 
     ) 

    [71] => Array 
     (
      [tracking_date] => 2015-08-31 
      [tracking_isbot] => 0 
     ) 

    [72] => Array 
     (
      [tracking_date] => 2015-08-31 
      [tracking_isbot] => 0 
     ) 

    [73] => Array 
     (
      [tracking_date] => 2015-08-31 
      [tracking_isbot] => 1 
     ) 

    [74] => Array 
     (
      [tracking_date] => 2015-08-31 
      [tracking_isbot] => 0 
     ) 

    [75] => Array 
     (
      [tracking_date] => 2015-08-31 
      [tracking_isbot] => 0 
     ) 

    [76] => Array 
     (
      [tracking_date] => 2015-08-31 
      [tracking_isbot] => 0 
     ) 

    [77] => Array 
     (
      [tracking_date] => 2015-08-31 
      [tracking_isbot] => 1 
     ) 

    [78] => Array 
     (
      [tracking_date] => 2015-08-31 
      [tracking_isbot] => 1 
     ) 

) 

最終的JSON輸出應可考慮如下:

{ date: '2015-08-29', human: 9, bots: 6 }, 
    { date: '2015-08-30', human: 18, bots: 6 }, 
    { date: '2015-08-31', human: 26, bots: 14 } 

從原來的數組:

[date] => xxxx-xx-xx as date:'xxxx-xx-xx' 
[isbot] => 0 should be counted as hits from human and 
[isbot] => 1 should be counted as hits from bots. 

我創造了這個功能,但無法返回數據在所需的格式:

function chartData($results) { 
$data = array(); 

foreach($results as $index => $result) { 
    if($result['tracking_isbot'] == 1) { 
     if(isset($data[$result['tracking_date']]['bots'])) { 
      $data[$result['tracking_date']]['bots'] += 1; 
     } else { 
      $data[$result['tracking_date']]['bots'] = 1; 
     } 
    } else { 
     if(isset($data[$result['tracking_date']]['human'])) { 
      $data[$result['tracking_date']]['human'] += 1; 
     } else { 
      $data[$result['tracking_date']]['human'] = 1; 
     } 
    } 
} 

return $data; 
} 

上述函數返回下面陣列JSON編碼之前:上述陣列的

Array 
(
    [2015-08-29] => Array 
     (
      [human] => 9 
      [bots] => 6 
     ) 

    [2015-08-30] => Array 
     (
      [human] => 18 
      [bots] => 6 
     ) 

    [2015-08-31] => Array 
     (
      [human] => 26 
      [bots] => 14 
     ) 

) 

json_encode():

{"2015-08-29":{"human":9,"bots":6},"2015-08-30":{"human":18,"bots":6},"2015-08-31":{"human":26,"bots":14}} 
+0

它也許更簡單的接收sql查詢 – splash58

+0

您是否嘗試過的東西這個信息?如果是這樣,請將其包含在您的問題中。 – Epodax

回答

0

您需要保存的時間太:

function chartData($results) { 
    $data = array(); 

    foreach($results as $result) { 
     $t_date = $result['tracking_date']; 

     if(!isset($data[$t_date])) { 
      $data[$t_date] = array(
       'date' => $t_date, 
       'human' => 0, 
       'bots' => 0, 
      ); 
     } 

     $data[$t_date]['bots'] += $result['tracking_isbot']; 
     $data[$t_date]['human'] += (1 - $result['tracking_isbot']); 
    } 

    return $data; 
} 
0

感謝@Matteo Tassinari,爲您提供解決方案。我稍微修改代碼,現在,它的工作對我來說十分...

function chartData($results) { 
$data = array(); 
$newArray = array(); 

foreach($results as $result) { 
    $t_date = $result['tracking_date']; 

    if(!isset($data[$t_date])) { 
     $data[$t_date] = array(
      'date' => $t_date, 
      'human' => 0, 
      'bots' => 0, 
     ); 
    } 

    $data[$t_date]['bots'] += $result['tracking_isbot']; 
    $data[$t_date]['human'] += (1 - $result['tracking_isbot']); 
} 

foreach($data as $key => $value) { 
    array_push($newArray, $value); 
} 

return $newArray; 
} 
+0

通過執行'$ newArray = array_values($ data);',或者直接移除'$ newArray'和'return array_values($ data);''' –