#php #dictionary
#php #словарь
Вопрос:
Я пытаюсь отформатировать свои данные для удобства отображения после запроса к базе данных. Я пробовал разные предложения из других вопросов, но безуспешно.
Данные выглядят примерно так (результат, объединенный из трех таблиц):
BOOK_ID | FIRST_NAME | LAST_NAME
------------------------------
1 | Jack | Smith
1 | Jill | Smith
3 | Mary | Poppins
Пример данных BOOK_ID — это идентификатор книги, второй и третий столбцы вместе — это имя автора книги. У книги может быть несколько авторов.
Мой желаемый результат был бы:
Array (
[1] => Array ( "Jack Smith", "Jill Smith" ),
[3] => Array ( "Mary Poppins" )
)
Идентификатор книги — это ключ, а значение — массив всех авторов.
Однако я не нашел способа создать такой массив.
Псевдокод для достижения этой цели:
$stmt = < SQL statement here >;
$stmt->execute();
$data = [];
foreach ($stmt as $row) {
if (< key exists in data >) {
// add name to the value array of the key
} else {
// insert new key with the first name
}
}
Я пытался сделать это:
$data[] = array($row['bookId'] => array($row['firstName'] . " " . $row['lastName']));
Но это привело к этому:
Array (
[0] => Array (
[1] => Array (
[0] => "Jack Smith"
)
)
)
Как я могу достичь своей цели?
Комментарии:
1.
$data[$row['bookId']][] = $row['firstName'] . " " . $row['lastName']
?2. Можете ли вы ИСПОЛЬЗОВАТЬ PDOs
FETCH_UNIQUE
или эквивалент вместе с group_concat в запросе mysql? phpdelusions.net/pdo/fetch_modes#FETCH_UNIQUE
Ответ №1:
Попробуйте что-то подобное?
$books = [];
foreach ($stmt as $row) {
$books[$row['BOOK_ID']][] = $row['FIRST_NAME'].' '. $row['LAST_NAME'];
}