PHP добавление пар ключ-значение в массив, где значение — массив, а ключ — идентификатор

#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'];
}