【发布时间】:2016-05-03 16:30:25
【问题描述】:
先提问,后解释:
第一个数组的原样,我想要一个看起来像第二个数组的:
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']));
}
}
【问题讨论】: