我正在尝试从电影中获取所有流派,并将它们自动放入选择列表,而无需进行硬编码。因此,如果我在octobercms后端制作一部新电影并将这种类型的电影“恐怖,神秘,惊悚”添加到选择列表中,那么我想知道如何将它们分离到选择列表中,或者只是将“恐怖”添加到选择列表。
我一直都遇到这些错误:
strtok() expects parameter 1 to be string, array given
preg_split() expects parameter 2 to be string, array given
到目前为止我正在做什么:
function onFilterMovies() {
$this->prepareVars();
}
function prepareVars() {
$options = post('Filter', []);
$this['movies'] = Movie::listFrontEnd($options);
$movies = Movie::all();
$genres = [];
foreach($movies as $movie) {
$genres[] = $movie->genre;
}
$this['genres'] = $genres;
}
<select class="dropdown" name="Filter[genres]">
<option value="">Genres</option>
{% for genre in genres | sort %}
<option value="{{genre}}">{{ genre }}</option>
{% endfor %}
</select>
选择列表的图像:
您可以结合使用array_reduce
和array_reduce
来获取所有流派,然后使用preg_split
来删除重复项:
preg_split
然后,您只需要为该选择元素循环遍历该数组。
Demo:array_unique
尝试使用阵列爆炸:
array_unique
$genres = array_unique(array_reduce($movies, static function ($genres, $movie) {
$movie_genres = preg_split('/\s*,\s*/', $movie->genre);
return array_merge($genres, $movie_genres);
}, []));
另外,您也可以使用采摘和减少来做Laravel Way
https://3v4l.org/I8JQP