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。