Вопрос первый, объяснение позже:Как объединить определенные части ассоциативного массива?
Insteat первого массива, я хочу один, который выглядит как secound массива:
echo json_encode($movies);
//WHAT I DO NOT WANT: [{"movie_name":"test1","genre_name":"Action"},{"movie_name":"test2","genre_name":"Drama"},{"movie_name":"test2","genre_name":"Action"}]
//WHAT I WANT: [{"movie_name":"test1","genres":["Action"]},{"movie_name":"test2","genres":["Drama","Action"]}]
Так insteat из severals строк с одинаковым значением для MOVIE_NAME, но разные значения для genre_name, мне нужна одна строка для каждого фильма, где все genre_names объединены в один массив gernes;
Решение, которое я хочу: Данные извлекаются из базы данных с использованием php и mysqli. Это запрос SQL я использую и который генерирует первый массив:
SELECT movies.movie_name, genres.genre_name FROM genres
INNER JOIN genre_movie ON genres.id = genre_movie.genre_id
INNER JOIN movies ON movies.id = genre_movie.movie_id;
Я не очень хорошо с SQL и думаю, что есть запрос который получает мне secound массив (тот, я хочу) сразу.
Мое решение до сих пор: я на самом деле решить эту проблему с помощью PHP arglorithm, но его любопытное complecated и твердые если что-нибудь чешуи или добавить новые столбцы:
foreach($myArray as $movie)
{
foreach($newList as $key => $item)
{
if($item['movie_name'] == $movie['movie_name']){
$exists = true;
$position = $key;
}
}
if($exists == true)
{
$newList[$position]['genres'][] = $movie['genre_name'];
$exists= false;
} else {
$newList[] = array('movie_name' => $movie['movie_name'], 'genres' => array($movie['genre_name']));
}
}
Это отлично работает, но ключ массива называется group_concat (genres.genre_name), что это хороший способ изменить это? ** EDIT: ** просто нужно было добавить AS new_name – user1911283