例如,让我们使用一些简单的数据集
+---------+------+------+------------+ | name | age | sex | position | +---------+------+------+------------+ | Antony | 34 | M | programmer | | Sally | 30 | F | manager | | Matthew | 28 | M | designer | +---------+------+------+------------+
我们想要得到的是这样组织的数组
Array ( [Antony] => Array ( [age] => 34 [sex] => M [position] => programmer ) [Sally] => Array ( [age] => 30 [sex] => F [position] => manager ) [Matthew] => Array ( [age] => 28 [sex] => M [position] => designer ) )
作为粗略的近似,我们可以使用
$pdo->query('SELECT * FROM employee')->fetchAll(PDO::FETCH_GROUP|PDO::FETCH_ASSOC);
但是结果是我们有不必要的嵌套级别
Array ( [Antony] => Array ( [0] => Array ( [age] => 34 [sex] => M [position] => programmer ) ) [Sally] => Array ( [0] => Array ( [age] => 30 [sex] => F [position] => manager ) ) [Matthew] => Array ( [0] => Array ( [age] => 28 [sex] => M [position] => designer ) ) )
我试图通过使用回调函数摆脱这种不必要的嵌套级别
$stmt->fetchAll(PDO::FETCH_GROUP|PDO::FETCH_ASSOC|PDO::FETCH_FUNC, 'current');
但是由于某些原因它没有通过
Array ( [0] => Array ( [age] => 34 [sex] => M [position] => programmer ) )
但是只是一堆标量34, 'M', 'programmer'来回调函数:(
34, 'M', 'programmer'
您可以使用回调等功能查看它
function what_do_you_pass_me() { $numargs = func_num_args(); $arg_list = func_get_args(); for ($i = 0; $i < $numargs; $i++) { echo "Argument $i is: " . $arg_list[$i] . "\n"; }; echo "\n\n"; };
那么有没有一种方法可以在PDO::FETCH_*不array_map('current', $result)获取结果后使用模式的情况下获得所需的结果集?
PDO::FETCH_*
array_map('current', $result)
这是一个很老的话题,但是我找到了一个非常简单的解决方案:
->fetchAll(\PDO::FETCH_GROUP|\PDO::FETCH_UNIQUE)
第一个列将被设置为键,其余将被设置为值。
无需遍历数组或使用array_map。