我尝试创建一个接受Query参数的API来过滤以下链接api/results/search?somefield=er
中的结果。我期待的结果应该是例如:
简而言之,谷歌Chrome的实际版本正是我所需要的,当您在谷歌浏览器中按CTRL+F
并尝试在此页面上搜索er
时,您将获得https://fr.lipsum.com/和ér
的全文搜索。
我正在使用Laravel Collection而不是Eloquent。
为了使搜索大小写不敏感,PHP已经有一个名为qazxsw poi的函数
er
现在我陷入困境,关于如何正确搜索变音字母(法语/西班牙语等等)。
我已经制作了一个字符列表,但不知道如何使用代码。
stristr($haystack, $needle)
如果有人能指出我应该使用什么方法,我将非常感激。我相信我需要使用foreach (request()->except('perPage') as $key => $value) {
$results = $results->filter(function ($item) use ($key, $value) {
return false !== stristr($item->$key, $value);
});
}
,但也许有一种类似于return [
'siblings' => [
'A' => ['À', 'Á', 'Â', 'Ã', 'Å', 'Ǻ', 'Ā', 'Ă', 'Ą', 'Ǎ', 'Α', 'Ά', 'Ả', 'Ạ', 'Ầ', 'Ẫ', 'Ẩ', 'Ậ', 'Ằ', 'Ắ', 'Ẵ', 'Ẳ', 'Ặ', 'А'],
'B' => ['B'],
'C' => ['Ç', 'Ć', 'Ĉ', 'Ċ', 'Č'],
'D' => ['Ð', 'Ď', 'Đ', 'Δ'],
'E' => ['È', 'É', 'Ê', 'Ë', 'Ē', 'Ĕ', 'Ė', 'Ę', 'Ě', 'Ε', 'Έ', 'Ẽ', 'Ẻ', 'Ẹ', 'Ề', 'Ế', 'Ễ', 'Ể', 'Ệ', 'Е', 'Э'],
'F' => ['ƒ'],
'G' => ['Ĝ', 'Ğ', 'Ġ', 'Ģ'],
'H' => ['Ĥ', 'Ħ'],
'I' => ['Ì', 'Í', 'Î', 'Ï', 'Ĩ', 'Ī', 'Ĭ', 'Ǐ', 'Į', 'İ', 'Η', 'Ή', 'Ί', 'Ι', 'Ϊ', 'Ỉ', 'Ị'],
'J' => ['Ĵ'],
'K' => ['Ķ', 'Κ', 'К'],
'L' => ['Ĺ', 'Ļ', 'Ľ', 'Ŀ', 'Ł', 'Λ', 'Л'],
'M' => [''],
'N' => ['Ñ', 'Ń', 'Ņ', 'Ň', 'Ν'],
'O' => ['Ò', 'Ó', 'Ô', 'Õ', 'Ō', 'Ŏ', 'Ǒ', 'Ő', 'Ơ', 'Ø', 'Ǿ', 'Ο', 'Ό', 'Ω', 'Ώ', 'Ỏ', 'Ọ', 'Ồ', 'Ố', 'Ỗ', 'Ổ', 'Ộ', 'Ờ', 'Ớ', 'Ỡ', 'Ở', 'Ợ', 'О'],
'P' => [''],
'R' => ['Ŕ', 'Ŗ', 'Ř'],
'S' => ['Ś', 'Ŝ', 'Ş', 'Ș', 'Š', 'Σ'],
'T' => ['Ț', 'Ţ', 'Ť', 'Ŧ', 'Τ', 'Т'],
'U' => ['Ù', 'Ú', 'Û', 'Ũ', 'Ū', 'Ŭ', 'Ů', 'Ű', 'Ų', 'Ư', 'Ǔ', 'Ǖ', 'Ǘ', 'Ǚ', 'Ǜ', 'Ủ', 'Ụ', 'Ừ', 'Ứ', 'Ữ', 'Ử', 'Ự'],
'X' => [''],
'Y' => ['Ý', 'Ÿ', 'Ŷ', 'Υ', 'Ύ', 'Ϋ', 'Ỳ', 'Ỹ', 'Ỷ', 'Ỵ'],
'W' => ['Ŵ'],
'Z' => ['Ź', 'Ż', 'Ž', 'Ζ'],
'AE' => ['Ä', 'Æ', 'Ǽ'],
'UE' => ['Ü'],
'IJ' => ['IJ'],
'OE' => ['Ö', 'Œ'],
'TH' => ['þ'],
'SS' => ['ß'],
'KS' => ['ξ'],
]
];
的简单方法?
感谢任何给定的想法。
你实际上并不需要创建自己的列表Laravel有一个名为preg_match的方法,它可以将非ascii字符转换为它们的ascii等价物,所以你可以这样做:
stristr()
在Str::ascii
中还有第二个参数用于语言,尽管从我看到的你只需要用它来表示bg(保加利亚语)或de(德语)
如果你需要检查整个列表是什么,你可以看到qazxsw poi,它也提到它是基于qazxsw poi库。
底线是不写自己的列表,除非已经存在的列表不够。
请注意,还可以选择使用foreach (request()->except('perPage') as $key => $value) {
$results = $results->filter(function ($item) use ($key, $value) {
return false !== stristr(\Str::ascii($item->$key), \Str::ascii($value));
});
}
,它将音译非ascii字符。更多信息在Str::ascii