Php 如何合并关联数组的特定部分?

Php 如何合并关联数组的特定部分?,php,mysql,arrays,mysqli,Php,Mysql,Arrays,Mysqli,先提问,后解释: 除了第一个数组,我想要一个看起来像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_n

先提问,后解释:

除了第一个数组,我想要一个看起来像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"]}]
因此,我希望每部电影有一行,其中所有类型的名称都合并到一个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 arglorith解决了这个问题,但如果有任何扩展,或者我添加了新列,那么它有点复杂和困难:

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

}

看一看小组会议:

我没有模拟您的表,但可能这是您的查询:

SELECT movies.movie_name, group_concat(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
GROUP BY movies.movie_name;
版本

好吧,我现在模仿它,是的,这是你的问题。我只想改变一下:

group_concat(genres.genre_name)
用于:


只返回不同的值。

这很好,但是数组键名为group\u concat(genres.genre\u name),有什么好方法可以更改它?编辑:只需添加为新名称
group_concat(distinct(genres.genre_name))