2014-12-06 67 views
2

我正在考慮如何通過具有相同值的對象對我的數組進行分組。PHP的JSON數組 - 相同的值

我從MySQL查詢結果如下:

Date   StartTime   EndTime 
2014-12-01   08:00    12:00 
2014-12-01   10:00    16:00 
2014-12-02   12:00    18:00 
2014-12-03   10:00    20:00 

我有叫$Data一個PHP變量此數據。

是否有可能像這樣用php獲得json數組:

[ 
    { 
     "2014-12-01": [ 
      { 
       "StartTime": "08:00", 
       "EndTime": "12:00" 
      }, 
      { 
       "StartTime": "10:00", 
       "EndTime": "16:00" 
      } 
     ] 
    }, 
    { 
     "2014-12-02": [ 
      { 
       "StartTime": "12:00", 
       "EndTime": "18:00" 
      } 
     ] 
    }, 
    { 
     "2014-12-03": [ 
      { 
       "StartTime": "10:00", 
       "EndTime": "20:00" 
      } 
     ] 
    } 
] 

如果我使用echo json_encode($Data),結果是:

[ 
    { 
     "Date": "2014-12-01", 
     "StartTime": "10:00", 
     "EndTime": "16:00" 
    }, 
    { 
     "Date": "2014-12-02", 
     "StartTime": "12:00", 
     "EndTime": "18:00" 
    }, 
    { 
     "Date": "2014-12-03", 
     "StartTime": "10:00", 
     "EndTime": "20:00" 
    } 
] 
+0

當然是可能的。你在PHP代碼中使用了什麼MySQL API?對於大多數你需要在讀取數組的時候創建數組,但是PDO甚至爲'fetchAll()'](http://php.net/manual/en/pdostatement.fetchall.php)提供了一個'FETCH_GROUP'選項,產生這種結構(或多或少)。 – 2014-12-06 03:10:44

+0

我有一個名爲'$ Data'的php變量的結果。 – 2014-12-06 03:11:43

+0

好吧,但是'$ Data'的實際PHP內容是什麼?請通過'print_r($ Data)'顯示一個有限的樣本,並且將用於從MySQL獲取行的PHP代碼發佈到'$ Data'中。 – 2014-12-06 03:13:32

回答

5

基於對問題結構概述:

需要PHP 5.4+的JSON美化打印,如果你對較低的版本只是刪除它並使用長數組格式。

$in = <<<'JSON' 
[ 
    { 
     "Date": "2014-12-01", 
     "StartTime": "10:00", 
     "EndTime": "16:00" 
    }, 
    { 
     "Date": "2014-12-02", 
     "StartTime": "12:00", 
     "EndTime": "18:00" 
    }, 
    { 
     "Date": "2014-12-03", 
     "StartTime": "10:00", 
     "EndTime": "20:00" 
    }, 
    { 
     "Date": "2014-12-03", 
     "StartTime": "12:00", 
     "EndTime": "20:00" 
    } 
] 
JSON; 

$data = json_decode($in, true); 
$out = []; 

foreach($data as $element) { 
     $out[$element['Date']][] = ['StartTime' => $element['StartTime'], 'EndTime' => $element['EndTime']]; 
} 

var_dump(json_encode($out, JSON_PRETTY_PRINT)); 

要得到完全相同的輸出如問題(返回的輸出包裝在一個單一的元素JSON陣列你需要在其他數組這樣的包裝$out

json_encode([$out], JSON_PRETTY_PRINT)

結果:

{ 
    "2014-12-01": [ 
    { 
     "StartTime": "10:00", 
     "EndTime": "16:00" 
    } 
    ], 
    "2014-12-02": [ 
    { 
     "StartTime": "12:00", 
     "EndTime": "18:00" 
    } 
    ], 
    "2014-12-03": [ 
    { 
     "StartTime": "10:00", 
     "EndTime": "20:00" 
    }, 
    { 
     "StartTime": "12:00", 
     "EndTime": "20:00" 
    } 
    ] 
} 
+0

你做了我的一天。非常感謝你。 – 2014-12-06 03:35:56

1

僱主姓名DATA_PATH 阿爾卑斯1. VIDEO_LINK 2. VIDEO_LINK 的Xyz 1. VIDEO_LINK 2. VIDEO_LINK 3. VIDEO_LINK

$stmt = $this->conn->prepare("SELECT a.employer_name,b.data_path FROM 
rec_experience a INNER JOIN rec_multi_upload_data b 
ON(a.rec_uniqueid=b.rec_id) WHERE b.data_type='Video' ORDER BY 
a.c_date DESC "); 
$stmt->execute(); 
$res = $stmt->fetchAll(PDO::FETCH_ASSOC); 

$out = []; 

foreach($res as $element) 
{ 
$out[$element['employer_name']][] = ['video_link' => 
$element['data_path']]; 
} 
echo json_encode($out);