我使用PHP和PDO从数据库中检索一组值,然后按第一列分组,使用以下代码:
$result = $sth->fetchAll(PDO::FETCH_GROUP|PDO::FETCH_NUM);
这意味着如果我的数据采用以下格式:
|Column1 |Column2 |Column3|
|1 |2 |a|
|1 |2 |b|
将其返回为:
1: {
[Column2: 2, Column3: a],
[Column2:2, Column3:b]
}
我如何按Column1和Column2进行分组,以便得到类似的内容:
1:
{
2:
{
Column3: a,
Column3:b
}
}
这可能与PDO常量的组合有关吗?
由于
答案 0 :(得分:3)
如您所见,通过使用PDO::FETCH_GROUP
对一个指定列进行分组,可以轻松地轻松地重建阵列。您需要的是将二维数组(数据库的结果)转换为三维数组,但不可能以这种方式重建它。
您需要通过嵌套循环手动执行此操作。这很简单,就像这样:
// let's assume $result is:
$result = [
[1, 2, 'a'],
[1, 2, 'b']
];
$newResult = [];
foreach( $result as $row ) {
$newResult[$row[0]][$row[1]][] = $row[2];
}
var_dump($newResult);
它返回:
array(1) {
[1]=>
array(1) {
[2]=>
array(2) {
[0]=>
string(1) "a"
[1]=>
string(1) "b"
}
}
}
它看起来像你需要的。
答案 1 :(得分:0)
您的查询和组中的结果集最好ORDER BY Column1
,如下所示:
$grouped = [];
$lastIdx = null;
foreach ($query->fetchAll() as $result) {
if ($lastIdx !== $result["Column1"]) {
$grouped[$result["Column1"]] = [$result];
} else {
$grouped[$result["Column1"]][] = $result;
}
$lastIdx = $result["Column1"];
}