2013-10-23 155 views
0

嗨,我試圖找出如何使用PHP和MySQL創建一個非常特定格式的JSON對象JSON對象:創建一個從MySQL數據庫

我的MySQL表看起來像這樣(不是最漂亮的,我知道) :

CREATE TABLE IF NOT EXISTS `room120` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `timestamp_start` datetime NOT NULL, 
    `timestamp_end` datetime NOT NULL, 
    `month` int(2) NOT NULL, 
    `day` int(2) NOT NULL, 
    `year` int(4) NOT NULL, 
    `name` text NOT NULL, 
    `email` text NOT NULL, 
    `phone` text NOT NULL, 
    `title` text NOT NULL, 
    `start` varchar(5) NOT NULL, 
    `end` varchar(5) NOT NULL, 
    `approved` enum('true','false','new') NOT NULL DEFAULT 'new', 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1; 

我怎麼需要我的JSON對象看:

[ 
    "10-23-2013": { 
     0: { 
      id : 1, 
      title : "Hello World", 
      time : "8:00 am - 10:00 am" 
     }, 
     1: { 
      id : 2, 
      title : "Hello Universe", 
      time : "1:00 pm - 3:00 pm" 
     } 
    } 
] 

我有我的cuurent PHP循環,構建ID和標題的一部分,但我有一個問題,構建有日期的一部分。

這裏是我的PHP環路(是的,我知道有建設日期部分,我想弄明白沒有符號):

$return_arr = array(); 
while ($row = $result->fetch_array(MYSQLI_ASSOC)) { 
    $date = str_pad($row[month], 2, "0", STR_PAD_LEFT).'-'.str_pad($row[day], 2, "0", STR_PAD_LEFT).'-'.$row[year]; 
    $start_time = DATE("g:i a", STRTOTIME($row[start])); 
    $end_time = DATE("g:i a", STRTOTIME($row[end])); 

    $row_array[id] = $row[id]; 
    $row_array[title] = $row[title]; 

    array_push($return_arr, $row_array); 
} 
echo json_encode(array("event" => $return_arr)); 

目前,它返回是這樣的:

Object {event: Array[15]} 
    event: Array[15] 
    0: Object 
     id: "1" 
     title: "Hello World" 
+1

1)在數組鍵上加上引號 – Jeroen

+0

2)$ row_array ['time'] = $ start_time。 ' - '。 $ end_time – Jeroen

+0

3)數據如何存儲在開始/結束?示例值? – Jeroen

回答

3

您需要在$return_arr中存儲另一個子陣列行。看看這裏:

$return_arr = array(); 
while ($row = $result->fetch_array(MYSQLI_ASSOC)) { 

    $date = str_pad($row[month], 2, "0", STR_PAD_LEFT).'-'.str_pad($row[day], 2, "0", STR_PAD_LEFT).'-'.$row[year]; 
    $start_time = DATE("g:i a", STRTOTIME($row[start])); 
    $end_time = DATE("g:i a", STRTOTIME($row[end])); 

    // create rowArr 
    $rowArr = array(
     'id' => $row['id'], 
     'title' => $row['title'], 
     'time' => $startTime . ' - ' . $endTime 
    ); 

    // store rowArr in $return_arr 
    $return_arr[$date][] = $rowArr; 

} 

// display json encode 

echo json_encode(array("event" => $return_arr)); 

現在你$return_arr是一個多維數組,應該呼應很好。

+0

總是最簡單的答案,不是嗎?哈哈。這完美的作品! –

+0

$ return_arr [$ start_time]> $ return_arr [$ date],否? – Jeroen

+0

個人而言,我會在$ return_arr中添加一行,'// store rowArr',如果(!array_key_exists($ start_time,$ return_arr))$ return_arr [$ start_time] = array();' –