Laravel:如何排序雄辩的集合忽略语言的文章?

问题描述 投票:2回答:2

在laravel中,是否有任何方法可以对语言中的文章进行排序(例如a,an,in English; el,la in Spanish;等等)?

我想要像jQuery Tablesorter这样的标题,但我只能找到

How to sort an array with PHP, ignoring the articles (a, an, the) in the beginning?

How to sort in SQL, ignoring articles ('the", "a', "an" etc)

如果它是一个数组,那很好,但我有分页的集合,对分页结果进行排序是没有意义的,因为它只会对有限的结果进行排序而不是整个集合。

laravel sorting collections eloquent
2个回答
1
投票

@Alexey的答案确实解决了问题,如果你没有分页集合,因为我有分页,我通过使用orderByRaw()方法和正则表达式大小写匹配来解决问题。希望这有助于处于类似情况的人。

$query->orderByRaw("CASE
                        WHEN title REGEXP '^("a|an|the|el|la")[[:space:]]' = 1 THEN
                            TRIM(SUBSTR(title, INSTR(title, ' ')))
                        ELSE title
                    END ASC");

0
投票

您可以将闭包传递给sortBy()sortByDesc()方法:

$collection->sortBy(function ($i) {
    return trim(str_replace([' a ', ' an ', ' the ', ' el '], '', ' ' . $i['title'] . ' '));
});

此代码将在字符串的开头和结尾添加空格(即对象中的title属性或集合中的数组)。然后它将删除文章,并且不会删除具有“an”或“the”(或其中的一些其他文章)或以文章开头或结尾的单词。然后它将从每个字符串的开头和结尾删除空格。然后它将返回一个已排序的集合。

© www.soinside.com 2019 - 2024. All rights reserved.