Например, давайте использовать простой набор данных
+---------+------+------+------------+
| 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'
для функции обратного вызова: (
Вы можете увидеть это с помощью такой функции, как обратный вызов
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)
после получения результатов?