このPHPスニペットは、リクエスト内に 'query' パラメータが存在するかを確認し、`$or` 演算子を使って検索条件の配列を初期化します。これは複数のフィールドに対する柔軟な検索を可能にし、特殊文字や高度な検索パターンにも対応できるように拡張可能です。
if(!empty($_REQUEST['query'])){
$criteria['$or'] = [];
$testRegex = $_REQUEST['query'];
$diacriticMap = [
'A'=>'AⒶAÀÁÂẦẤẪẨÃĀĂẰẮẴẲȦǠÄǞẢÅǺǍȀȂẠẬẶḀĄȺⱯ',
'AA'=>'Ꜳ',
'AE'=>'ÆǼǢ',
'AO'=>'Ꜵ',
'AU'=>'Ꜷ',
'AV'=>'ꜸꜺ',
'AY'=>'Ꜽ',
'B'=>'BⒷBḂḄḆɃƂƁ',
'C'=>'CⒸCĆĈĊČÇḈƇȻꜾ',
'D'=>'DⒹDḊĎḌḐḒḎĐƋƊƉꝹ',
'DZ'=>'DZDŽ',
'Dz'=>'DzDž',
'E'=>'EⒺEÈÉÊỀẾỄỂẼĒḔḖĔĖËẺĚȄȆẸỆȨḜĘḘḚƐƎ',
'F'=>'FⒻFḞƑꝻ',
'G'=>'GⒼGǴĜḠĞĠǦĢǤƓꞠꝽꝾ',
'H'=>'HⒽHĤḢḦȞḤḨḪĦⱧⱵꞍ',
'I'=>'IⒾIÌÍÎĨĪĬİÏḮỈǏȈȊỊĮḬƗ',
'J'=>'JⒿJĴɈ',
'K'=>'KⓀKḰǨḲĶḴƘⱩꝀꝂꝄꞢ',
'L'=>'LⓁLĿĹĽḶḸĻḼḺŁȽⱢⱠꝈꝆꞀ',
'LJ'=>'LJ',
'Lj'=>'Lj',
'M'=>'MⓂMḾṀṂⱮƜ',
'N'=>'NⓃNǸŃÑṄŇṆŅṊṈȠƝꞐꞤ',
'NJ'=>'NJ',
'Nj'=>'Nj',
'O'=>'OⓄOÒÓÔỒỐỖỔÕṌȬṎŌṐṒŎȮȰÖȪỎŐǑȌȎƠỜỚỠỞỢỌỘǪǬØǾƆƟꝊꝌ',
'OI'=>'Ƣ',
'OO'=>'Ꝏ',
'OU'=>'Ȣ',
'P'=>'PⓅPṔṖƤⱣꝐꝒꝔ',
'Q'=>'QⓆQꝖꝘɊ',
'R'=>'RⓇRŔṘŘȐȒṚṜŖṞɌⱤꝚꞦꞂ',
'S'=>'SⓈSẞŚṤŜṠŠṦṢṨȘŞⱾꞨꞄ',
'T'=>'TⓉTṪŤṬȚŢṰṮŦƬƮȾꞆ',
'TZ'=>'Ꜩ',
'U'=>'UⓊUÙÚÛŨṸŪṺŬÜǛǗǕǙỦŮŰǓȔȖƯỪỨỮỬỰỤṲŲṶṴɄ',
'V'=>'VⓋVṼṾƲꝞɅ',
'VY'=>'Ꝡ',
'W'=>'WⓌWẀẂŴẆẄẈⱲ',
'X'=>'XⓍXẊẌ',
'Y'=>'YⓎYỲÝŶỸȲẎŸỶỴƳɎỾ',
'Z'=>'ZⓏZŹẐŻŽẒẔƵȤⱿⱫꝢ',
'a'=>'aⓐaẚàáâầấẫẩãāăằắẵẳȧǡäǟảåǻǎȁȃạậặḁąⱥɐ',
'aa'=>'ꜳ',
'ae'=>'æǽǣ',
'ao'=>'ꜵ',
'au'=>'ꜷ',
'av'=>'ꜹꜻ',
'ay'=>'ꜽ',
'b'=>'bⓑbḃḅḇƀƃɓ',
'c'=>'cⓒcćĉċčçḉƈȼꜿↄ',
'd'=>'dⓓdḋďḍḑḓḏđƌɖɗꝺ',
'dz'=>'dzdž',
'e'=>'eⓔeèéêềếễểẽēḕḗĕėëẻěȅȇẹệȩḝęḙḛɇɛǝ',
'f'=>'fⓕfḟƒꝼ',
'g'=>'gⓖgǵĝḡğġǧģǥɠꞡᵹꝿ',
'h'=>'hⓗhĥḣḧȟḥḩḫẖħⱨⱶɥ',
'hv'=>'ƕ',
'i'=>'iⓘiìíîĩīĭïḯỉǐȉȋịįḭɨı',
'j'=>'jⓙjĵǰɉ',
'k'=>'kⓚkḱǩḳķḵƙⱪꝁꝃꝅꞣ',
'l'=>'lⓛlŀĺľḷḹļḽḻſłƚɫⱡꝉꞁꝇ',
'lj'=>'lj',
'm'=>'mⓜmḿṁṃɱɯ',
'n'=>'nⓝnǹńñṅňṇņṋṉƞɲʼnꞑꞥ',
'nj'=>'nj',
'o'=>'oⓞoòóôồốỗổõṍȭṏōṑṓŏȯȱöȫỏőǒȍȏơờớỡởợọộǫǭøǿɔꝋꝍɵ',
'oi'=>'ƣ',
'ou'=>'ȣ',
'oo'=>'ꝏ',
'p'=>'pⓟpṕṗƥᵽꝑꝓꝕ',
'q'=>'qⓠqɋꝗꝙ',
'r'=>'rⓡrŕṙřȑȓṛṝŗṟɍɽꝛꞧꞃ',
's'=>'sⓢsßśṥŝṡšṧṣṩșşȿꞩꞅẛ',
't'=>'tⓣtṫẗťṭțţṱṯŧƭʈⱦꞇ',
'tz'=>'ꜩ',
'u'=>'uⓤuùúûũṹūṻŭüǜǘǖǚủůűǔȕȗưừứữửựụṳųṷṵʉ',
'v'=>'vⓥvṽṿʋꝟʌ',
'vy'=>'ꝡ',
'w'=>'wⓦwẁẃŵẇẅẘẉⱳ',
'x'=>'xⓧxẋẍ',
'y'=>'yⓨyỳýŷỹȳẏÿỷẙỵƴɏỿ',
'z'=>'zⓩzźẑżžẓẕƶȥɀⱬꝣ'
];
foreach($diacriticMap as $kk=>$vv){
$testRegex = str_replace($kk,"[$vv]",$testRegex);
}
/*print_r($testRegex);
exit;*/
$criteria['$or'][0]['email'] = new MongoRegex($_REQUEST['query'],'i');
$criteria['$or'][1]['name'] = new MongoRegex($testRegex,'i');
$criteria['$or'][2]['surname'] = new MongoRegex($testRegex,'i');