假设您已经获得了服务器上的文件夹列表(通过while() 循环或glob() 函数)并且此列表存储在$folderList[] 中,如果您是只是输出结果:
$a = array(...);
$e = array(...);
$i = array(...);
$o = array('Ò','Ó','Ô','Õ','Ö','ò','ó','ô','õ','ö');
$u = array(...);
foreach($folderList as $folder){
$folder = str_replace($a,"a",$folder);
$folder = str_replace($e,"e",$folder);
$folder = str_replace($i,"i",$folder);
$folder = str_replace($o,"o",$folder);
$folder = str_replace($u,"u",$folder);
}
它相当草率,但也相当简单。如果您想要运行得更快的东西,您会考虑进行数学运算或与 unicode 的二进制值进行比较。例如,$o 数组中的所有内容都是 Unicode 字符 00D2 到 00D6 和 00F2 到 00F6。因此,如果该字母介于 dechex('00D2') 和 dechex('00D6') 之间,或者该字母介于 dechex('00F2') 和 dechex('00F6') 之间,则将其替换为“o”。
如果您获取的值不包含特殊字符(例如通过 URL 发布)并且您希望将其映射到文件夹,那么您必须采取稍微不同的方法。首先,意识到这不是理想的解决方案,因为您可能有两个文件夹,一个名为Òdla,一个名为Ödla。在这种情况下,搜索短语 odla 只能引用这些文件夹中的 一个。另一个将被永久忽略。假设您对此没问题(例如:您可以保证不会有此类重复的文件夹名称),您可能希望使用GLOB_BRACE。
<?php
$vowels = array("a", "e", "i", "o", "u");
$replace = array("...", "...", "...", "{Ò,Ó,Ô,Õ,Ö,ò,ó,ô,õ,ö}", "...");
$search = "odla";
$search = str_replace($vowels, $replace, $search);
// Returns every folder who matches "Òdla", "Ódla", "Ôdla"....
glob($search, GLOB_BRACE);
?>