2014-12-06 90 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);