OVH Cloud OVH Cloud

Comparaisons de caracteres accentues avec strcoll

2 réponses
Avatar
jhoude
Bonjour,
j'ai des problèmes avec la fonctione strcoll de PHP.
J'utilise le code suivant sur un résultat de recherche LDAP.

setlocale(LC_ALL, "fr_FR");
function sort_ldap_entries($e, $fld, $order)
{
for ($i = 0; $i < $e['count']; $i++) {
for ($j = $i; $j < $e['count']; $j++) {
$d = strcoll(strtolower($e[$i][$fld][0]),
strtolower($e[$j][$fld][0]));
switch ($order) {
case 'A':
if ($d > 0)
swap($e, $i, $j);
break;
case 'D':
if ($d < 0)
swap($e, $i, $j);
break;
}
}
}
return ($e);
}

function swap(&$ary, $i, $j)
{
$temp = $ary[$i];
$ary[$i] = $ary[$j];
$ary[$j] = $temp;
}

C'est un bout de code que j'ai trouvé sur php.net. Avant il y avait un
strcasecmp() et je l'ai remplacé par un strcoll. (Avant il
fonctionnait bien excepté que les mots commençant par des accents
étaient à la fin)
Mais au lieu de classer les résultats correctement, il donne ceci :
Édith Plante
Adrien Ndayegamiye
Élaine Arsenault
Alexandre Lévesque
Éric Bergeron
Benoît Bolduc
etc...

C'est comme s'il donnait au "É" la même importance qu'un "A" !

Est-ce que j'ai fait une erreur ou il y a un problème dans strcoll() ?

2 réponses

Avatar
loufoque
Message d'origine de Jean-Pascal Houde :

j'ai des problèmes avec la fonctione strcoll de PHP.


Utilise tout simplement usort($array, 'strcoll');

Avatar
jhoude
loufoque wrote in message news:<bub99m$kui$...
Message d'origine de Jean-Pascal Houde :

j'ai des problèmes avec la fonctione strcoll de PHP.


Utilise tout simplement usort($array, 'strcoll');


J'ai toujours le même problème de classement avec les accents :

<?php
setlocale(LC_ALL, "fr_FR");
$tab = array("Éric", "Charles", "Arianne", "Élaine", "Annie",
"Anne-marie", "Alain");
usort ($tab, "strcoll");
foreach ($tab as $nom)
{
echo $nom."<br>";
}
?>
Le résultat est :
Alain
Élaine
Anne-marie
Annie
Arianne
Éric
Charles