Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Всем привет!
В Laravel 5.6 разбираясь с коллекциями https://laravel.ru/docs/v5/collections
не нашел а можно ли в результирующей коллекции пропустить некоторые элементы, вроде :
$aliasArray = ['contact_us','tdes_quiz', 'NONE', 'NO'];
$collection = collect($aliasArray)->map(function ($next_alias) {
echo '<pre>$next_alias::'.print_r($next_alias,true).'</pre>';
if (empty($next_alias)) {
// SKIP;
}
$cmsItemContent = CmsItem::getBodyContentByAlias($next_alias, ['show_song_name' => 1]);
if ($cmsItemContent !== null) {
// SKIP;
}
return $cmsItemContent;
});
// $collection = $collection->where('ID IS SET', 100);
// $collection->all();
}
Сейчас в collection 2 последних элемента имеют значение false.
Их никак пропустить не можно ?
Я пытался использовать where после цикла - но непонятно как если елемент имеет значение false.
Можно ли и как?
Спасибо !
Не в сети
Не в сети
Про in_array я в курсе Для меня привычно если нужно выбрать из данных часть набора делать что-то вроде:
$dataArray= [];
foreach( $artistConcertsList as $next_key=>$nextArtistConcert ) {
if ( in_array($nextArtistConcert['event_date_is_past'], [ 'is_today', 'is_tomorrow', 'is_future' ]) ) {
$dataArray[]= $nextArtistConcert;
}
}
То есть часть данных удаляется Можно лим сделать так и для коллекций?
Коллекции - это вроде как более прогрессивно чем старые циклы ?
Не в сети
Фильтр делают через Collection::filter() или Collection::where()
$filtered = $collection->filter(function ($value, $key) {
return $value > 2;
});
1) не делай два дела сразу: фильтрацию и вывод через echo. враги php называют это «php mess» )))
2) не делай collect($aliasArray)->filter(…), раз уж у тебя на входе массив, фильтруй его через array_filter(), так будет гораздо эффективнее. Результат уже заверни в collection(), если еще не передумаешь.
- Коллекции — это вроде как более прогрессивно чем старые циклы?
это на 100% зависит от использующего
10 less known but awesome laravel collections methods
array_filter
Изменено artoodetoo (21.04.2018 16:08:51)
There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.
Не в сети
Спасибо, но видимо к коллекциям нужно привыкнуть...
Хочу сделать сортировку по среднему из 2х полей, где tempmostRatingArtistsList - коллекция из данных базы:
$mostRatingArtistsList= $tempmostRatingArtistsList->sort(function ($a, $b) {
if ( empty($a->related_votes_count) or empty($b->related_votes_count)) return 0;
$a_rating= floor($a->related_votes_sum / $a->related_votes_count);
$b_rating= floor($b->related_votes_sum / $b->related_votes_count);
if ( $a_rating == $b_rating ) {
return 0;
}
return ($a_rating < $b_rating) ? -1 : 1;
});
Судя по описанию метод sort это обертка для uasort - и вроде логика правильна
Но выходные данные в mostRatingArtistsList неотсортированные...
Или неправильное опеределение выше ?
Не в сети
if ( empty($a->related_votes_count) or empty($b->related_votes_count)) return 0;
ИМХО, эта строка всё портит.
переделай так, чтобы пустой count обнулял соответствующий рейтинг. сейчас ты делаешь его равным любому другому рейтингу это ошибка.
There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.
Не в сети