Есть ли способ заказать элементы, отфильтрованные в коллекции Laravel?

У меня есть следующий код фильтра:

$cards->filter(function($card) {
if(str_contains($card->text, 'white') || str_contains($card->text, 'blue') || str_contains($card->text, 'black') || str_contains($card->text, 'red') || str_contains($card->text, 'green')) {
return true;
}
});

Я хотел бы получить результаты в следующем порядке: белый, синий, черный, красный, зеленый. Как я могу сделать так, чтобы результаты были в таком порядке?

Пример данных карты:

stdClass Object
(
[text] => Flowers are white.
)

0

Решение

$colors = ['white', 'blue', 'black', 'red', 'green'];

$cards = $cards->filter(function($card) use ($colors)
{
return str_contains($card->text, $colors);
})
->sortBy(function($card) use ($colors)
{
foreach ($colors as $index => $color)
{
if (str_contains($card->text, $color))
{
return $index;
}
}
})
->values();
3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]