0
我想通过自定义字母表(国际名称,没有一个Collator语言环境将它们按照我想要的顺序放入它们)对数组进行排序。自定义整理与php使用usort
我从here偷了一些代码,并且有。
function compare_by_alphabet($str1, $str2){
$alphabet = "AaÀàÁáÂâÅåÃãÄäÆæBbCcÇçDdÐðEeÈèÉéÊêËëFfGgHhIiÌìÍíÎîÏïJjKkLlMmNnÑñOoÒòÓóÔôÕõÖöØøPpQqRrSsߊšTtUuÙùÚúÛûÜüVvWwXxYyŸÿÝýZzŽžÞþ";
$l1 = strlen($str1);
$l2 = strlen($str2);
$c = min($l1, $l2);
for ($i = 0; $i < $c; $i++)
{
$s1 = substr($str1, $i, 1);
$s2 = substr($str2, $i, 1);
if ($s1===$s2) continue;
$i1 = strpos($alphabet, $s1);
if ($i1===false) continue;
$i2 = strpos($alphabet, $s2);
if ($i2===false) continue;
if ($i2===$i1) continue;
if ($i1 < $i2) return -1;
else return 1;
}
if ($l1 < $l2) return -1;
elseif ($l1 > $l2) return 1;
return 0;
}
当我尝试
$names=["Schön","Åsberg","Zierer","Ås","Žižek","Schon","Asber"];
usort($names, 'compare_by_alphabet');
我得到["Asber","Ås","Åsberg","Schön","Schon","Žižek","Zierer"]
- 两个舍恩的是错误的是四周,是齐泽克和Zierer。
我在这里错过了一些东西。有人可以解释为什么这不符合预期,请吗?或者我可以如何解决它?
我不知道!非常感谢,非常感谢。 – Richie