使用PHP将多个数组合并为一个具有唯一值的数组

3

我知道在Stack Overflow上有很多类似的主题,但是没有一个适用于我的情况。

我的目标是从数据库中获取唯一的展示类型。它们存储在show_genres列中,以逗号分隔(1,2,3或更多)。

$link = mysqli_connect('127.0.0.1', 'root', 'pw', 'db');
$query = "SELECT show_genres FROM tv_shows";
$result = mysqli_query($link, $query);
foreach ($result as $value) {
$sh_genres = $value['show_genres'];
$sh_genres_array = array_map('trim', explode(',',$sh_genres));

// $doesnt_work = call_user_func_array("array_merge", 
$sh_genres_array); // doesn't work for me


echo '<pre>' . var_export($sh_genres_array, true) . '</pre>';
}

我的结果如下:
array (
  0 => 'Drama',
  1 => 'Action',
  2 => 'Crime',
)
array (
  0 => 'Drama',
  1 => 'Crime',
)
array (
  0 => 'Drama',
  1 => 'Thriller',
)
array (
  0 => 'DIY',
)
array (
  0 => 'Drama',
  1 => 'Mystery',
  2 => 'Supernatural',
)

然而,我只需要一个包含唯一值的数组,例如:unique values
array (
  0 => 'Drama',
  1 => 'Mystery',
  2 => 'Supernatural',
  4 => 'Thriller',
  5 => 'DIY',
  6 => 'Crime',
  7 => 'etc...'

)

如果我在foreach循环之前尝试创建一些数组,然后将数据存储到其中,这种方法也不能得到结果。
也许,通过SQL有更简单的解决方案!?!

1
你应该对数据库进行规范化处理。这样当前的问题就只是一个简单的数据库查询了。 - jeroen
你能否建议我如何进行规范化?只需要一个简单的例子。谢谢。当然,在这种情况下,应该是最简单的查询 :-) - Alex Cardo
添加一个包含“流派”(genres)的表格,以及另一个将“电视节目”(tv_shows)与流派相关联的表格。 - jeroen
3个回答

4

请尝试以下代码

在SQL中

$query = "SELECT show_genres FROM tv_shows GROUP BY show_genres";

在PHP中

$newArray  = array();

foreach ($result as $value) {

  $sh_genres = $value['show_genres'];
  $sh_genres_array = array_map('trim', explode(',',$sh_genres));

  $newArray = array_merge($newArray , $sh_genres_array );    

}

$newUniqueArray = array_unique($newArray);

我可能会尝试这样做,但我的数组没有命名。 - Alex Cardo
我理解这个想法,但在这种情况下,我将不得不创建一些额外的foreach循环来标记我的数组。但我不知道如何实现它。 - Alex Cardo
2)$newUniqueArray 给了我大约26个流派,这是不可能的)))。 - Alex Cardo
你想从数据库中获取show_genres的所有唯一值吗? - Sree KS
准确地说...全部都有!我猜大约有150-200种流派...或更多。 - Alex Cardo
显示剩余3条评论

2
尝试使用这段代码。
    $link = mysqli_connect('127.0.0.1', 'root', 'pw', 'db');
    $query = "SELECT show_genres FROM tv_shows";
    $result = mysqli_query($link, $query);
    $sh_genres_array = [];
    foreach ($result as $value) {
    $sh_genres = $value['show_genres'];
    $sh_genres_array = array_merge(
        $sh_genres_array ,
        array_map('trim', explode(',',$sh_genres))
    );
}
echo '<pre>' . var_export(array_unique($sh_genres_array), true) . '</pre>';

更新

请考虑规范化您的数据库。


0

不确定,但可以试一下。

 $genre_arr = RecursiveIteratorIterator(new RecursiveArrayIterator($sh_genres_array));

 $unique_genre = array_unique($genre_arr);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接