PDO 按列名获取结果索引
PDO get result index by column name
假设我有一个简单的 table 比如
姓名 |电子邮件
一个 | @a.com
乙 | b@b.com
如果我这样做
$result = $db->fetchAll(PDO::FETCH_ASSOC)
在 SELECT * 例如,我得到类似
Array{
[0] => array{
['name'] => 'a'
['email'] => 'a@a.com'
}
[1] => array{
['name'] => 'b'
['email'] => 'b@b.com'
}
}
我想要类似的东西
Array{
['name'] => Array{
[0] => 'a'
[1] => 'b'
}
['email'] => Array{
[0] => 'a@a.com'
[1] => 'b@b.com'
}
}
因此 $result['name'] 是一个包含所有名称的数组。我知道我可以自己编写一个非常小的函数来做到这一点。只是想知道是否有一些 fetch_style 参数可以自动执行此操作。
谢谢!
无法使用任何 PDO 标志来实现。
这是我建议的转换脚本,它非常小:
$result = [];
foreach($array as $arr) foreach($arr as $k=>$v) $result[$k][] = $v;
print_r($result);
有一种方法可以做到这一点。
您可以按照建议使用 PDO::FETCH_GROUP
here:
To return an associative array grouped by the values of a specified column, bitwise-OR PDO::FETCH_COLUMN with PDO::FETCH_GROUP.
此标志将按您 select 的第一列进行索引,您只需将所需的索引字段移动到位置 0。
假设我有一个简单的 table 比如
姓名 |电子邮件
一个 | @a.com
乙 | b@b.com
如果我这样做
$result = $db->fetchAll(PDO::FETCH_ASSOC)
在 SELECT * 例如,我得到类似
Array{
[0] => array{
['name'] => 'a'
['email'] => 'a@a.com'
}
[1] => array{
['name'] => 'b'
['email'] => 'b@b.com'
}
}
我想要类似的东西
Array{
['name'] => Array{
[0] => 'a'
[1] => 'b'
}
['email'] => Array{
[0] => 'a@a.com'
[1] => 'b@b.com'
}
}
因此 $result['name'] 是一个包含所有名称的数组。我知道我可以自己编写一个非常小的函数来做到这一点。只是想知道是否有一些 fetch_style 参数可以自动执行此操作。 谢谢!
无法使用任何 PDO 标志来实现。
这是我建议的转换脚本,它非常小:
$result = [];
foreach($array as $arr) foreach($arr as $k=>$v) $result[$k][] = $v;
print_r($result);
有一种方法可以做到这一点。
您可以按照建议使用 PDO::FETCH_GROUP
here:
To return an associative array grouped by the values of a specified column, bitwise-OR PDO::FETCH_COLUMN with PDO::FETCH_GROUP.
此标志将按您 select 的第一列进行索引,您只需将所需的索引字段移动到位置 0。