我有以下过滤器代码:
$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 :(得分:3)
$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();