J'essaie de trier un tableau par un alphabet personnalisé (noms internationaux, aucune des locales de Collator ne les place exactement dans l'ordre que je veux).Collation personnalisée avec php en utilisant usort
J'ai volé du code de here et ai.
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;
}
Lorsque je tente
$names=["Schön","Åsberg","Zierer","Ås","Žižek","Schon","Asber"];
usort($names, 'compare_by_alphabet');
Je reçois ["Asber","Ås","Åsberg","Schön","Schon","Žižek","Zierer"]
- sont mauvais de deux Schon était là, tout comme Žižek et Zierer.
Il me manque quelque chose ici. Quelqu'un peut-il expliquer pourquoi cela ne se comporte pas comme prévu, s'il vous plaît? Ou comment je peux le réparer?
Je ne savais pas! Merci beaucoup, appréciez-le. – Richie