Boucle DATA qui ordonne les textes en majuscules avant ceux en minuscules

Hello ! J’ai du mal à m’expliquer pourquoi le tri dans une boucle DATA semble ordonner les majuscules avant les minuscules. Je ne sais pas si il y’a des subtilités que je ne connais pas ou si c’est un bug, une idée ?

#SET{elements,#ARRAY{}}
#SET{elements,#GET{elements}|push{#ARRAY{id,1,titre,toto AAA}}}
#SET{elements,#GET{elements}|push{#ARRAY{id,2,titre,toto BBB}}}
#SET{elements,#GET{elements}|push{#ARRAY{id,3,titre,toto ccc}}}
#SET{elements,#GET{elements}|push{#ARRAY{id,4,titre,toto cCc}}}
#SET{elements,#GET{elements}|push{#ARRAY{id,5,titre,toto Ccc}}}
#SET{elements,#GET{elements}|push{#ARRAY{id,6,titre,toto DDD}}}

<BOUCLE_elements(DATA) {source table, #GET{elements}} {par titre}>
	<code>[(#VALEUR|table_valeur{id})] - [(#VALEUR|table_valeur{titre})]</code><br>
</BOUCLE_elements>

Produit le résultat suivant :

1 - toto AAA
2 - toto BBB
5 - toto Ccc
6 - toto DDD
4 - toto cCc
3 - toto ccc

tu tries {par titre}, or les majuscules sont avant les minuscules.

pour ne pas tenir compte de la casse, peux tu essayer {par LOWER(titre)} à la place ?

Comme les données de l’exemple ne sont pas issues d’une requête SQL, j’aurais tendance à adopter la syntaxe suivante pour parcourir un tableau déjà trié.

function par_titre_naturel($liste = []): array {
	$titres = array_column($liste, 'titre') ?? [];
	array_multisort($titres, SORT_NATURAL | SORT_FLAG_CASE, $liste);
	return $liste;
}
<BOUCLE_elements(DATA) {source table, #GET{elements}|par_titre_naturel}>
  <code>#ID - #TITRE</code><br>
</BOUCLE_elements>

oui effectivement LOWER ne va pas être à l’aise dans ce contexte.

Ca fonctionnement parfaitement avec LOWER(titre) ({par BINARY(titre)} également d’ailleurs).
Je n’ai pas encore essayé ta solution Placido mais elle semble intéressante !

Je découvre vraiment un truc avec ces histoires de tris, il était temps ! :smiley:
Merci à vous deux pour les pistes.