gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 23:38:38 24 4
gpt4 key购买 nike

先提问,后解释:

代替第一个数组,我想要一个看起来像第二个数组的数组:

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"]}]

因此,在多个行中,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,我认为有一个查询可以让我立即获得第二个数组(我想要的那个)。

到目前为止我的解决方案:我实际上使用 php arglorithm 解决了这个问题,但如果有任何扩展或我添加新列,它有点复杂和困难:

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:http://dev.mysql.com/doc/refman/5.7/en/group-by-functions.html#function_group-concat

我没有模拟您的表,但也许这是您的查询:

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_concat(distinct(genres.genre_name))

只返回不同的值。

关于php - 如何合并关联数组的特定部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35025219/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com