Как получить первый заголовок из строки для массива - PullRequest
0 голосов
/ 29 октября 2019

Я пытаюсь получить все жанры из фильмов и автоматически добавить их в список выбора без жесткого кодирования. Поэтому, если я создам новый фильм в бэкэнде 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>

Изображение для списка выбора:

Image for the select list:

Ответы [ 3 ]

1 голос
/ 29 октября 2019

Вы можете использовать array_reduce в сочетании с preg_split для захвата всех жанров, затем 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);
}, []));

Тогда вам просто нужно перебрать этот массив для элемента select.

Демонстрация: https://3v4l.org/I8JQP

0 голосов
/ 29 октября 2019

Также вы можете сделать это Laravel Way используя pluck и уменьшите

$this['genres'] = Movie::all()->pluck('genre')->reduce(static function ($genres, $itemGenre) {
    array_merge($genres, explode(',', $itemGenre));
}, []);
0 голосов
/ 29 октября 2019

Попробуйте использовать Разнесение массива:

$title = 'a, b, c';
array_explode($title, ','); // ['a', 'b', 'c']

https://www.php.net/manual/en/function.explode.php

...