Php 将多个数组合并为一个具有唯一值的数组
我知道在堆栈溢出上有很多类似的线程,但在我的例子中没有一个是有效的 我的目标是从数据库中获取独特的节目类型。它们存储在“显示类型”列中,以逗号分隔(1、2、3或更多)Php 将多个数组合并为一个具有唯一值的数组,php,mysql,Php,Mysql,我知道在堆栈溢出上有很多类似的线程,但在我的例子中没有一个是有效的 我的目标是从数据库中获取独特的节目类型。它们存储在“显示类型”列中,以逗号分隔(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 $valu
$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>';
}
但是,我只需要一个包含唯一值的数组,例如:
$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);
如果我尝试在foreach循环之前创建一些数组,然后将数据存储到其中,这种方法也不会给出结果
也许,有一个更简单的解决方案是通过SQL 请尝试此代码
$genre_arr = RecursiveIteratorIterator(new RecursiveArrayIterator($sh_genres_array));
$unique_genre = array_unique($genre_arr);
SQL中的
$query=“按节目类型从电视节目组中选择节目类型”
PHP中的
$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>';
尝试使用此代码
$genre_arr = RecursiveIteratorIterator(new RecursiveArrayIterator($sh_genres_array));
$unique_genre = array_unique($genre_arr);
$link=mysqli_connect('127.0.0.1','root','pw','db');
$query=“从电视节目中选择节目类型”;
$result=mysqli\u查询($link,$query);
$sh_genres_array=[];
foreach(结果为$value){
$sh_流派=$value['show_流派];
$sh\u genres\u array=array\u merge(
$sh_流派_阵列,
数组映射('trim',explode(',',$sh_类型))
);
}
回显“”。var_导出(数组唯一($sh_流派数组),true)。“”;
更新
请考虑规范数据库
< p>不确定,但试试这个。我可能会尝试这样做,但是我的数组是未命名的。我理解这个想法,但是在这种情况下,我必须创建一些额外的foreach循环来以某种方式标记我的数组。但我不知道如何实现它。这正是我努力实现目标的方式,但我偶然发现了两个问题:1)当我尝试var_dump$newArray时,我无法得到结果2)$newUniqueArray只提供了大约26种风格,这是不可能的。)您想从数据库中获取show_流派的所有唯一值吗?您应该规范化您的数据库。那么现在的问题是一个简单的数据库查询。你能建议我如何规范它吗?这只是一个简单的例子。谢谢当然,在这种情况下,它应该是一个最简单的查询:-)添加一个带有
genres
的表和另一个链接tv\u shows
到genres的表。
$genre_arr = RecursiveIteratorIterator(new RecursiveArrayIterator($sh_genres_array));
$unique_genre = array_unique($genre_arr);