Aller au contenu

tri sur tableau


xpatval

Sujets conseillés

Bonjour,

Bien que j'ai opté pour une solution particulière, je pose qd même la question:

Dans une boucle, je construis un tableau de la sorte:

$tab = array("nom"=>$Entry,"duree"=>$temps,"taille"=>$taille)

La clé "nom" caractérise un nom de fichier (comportant des "_", dont le(s) dernier(s) caractère est/sont un incrément (de 1 à xx).

A la suite de quoi je souhaite exécuter un tri de ce tableau sur le nom.

Le problème posé est l'ordre de tri. Un sort($tab) me donnera un tri logique en fonction de l'incrémentation (nom_fichier_1, nom_fichier_10, nom_fichier_11, nom_fichier_2, nom_fichier_3), et non un tri naturel (nom_fichier_1,nom_fichier_2,nom_fichier_3,nom_fichier_10,nom_fichier_11).

Le natsort ne fonctionne pas, sans que je sache pourquoi (le champ trié est un string, ou bien les underscore posent problèmes ?)

Quelle fonction de tri pourrait faire ce que je souhaite ?

La solution que j'ai du adopter est la suivante: Récupération de l'incrément, et construction d'un "index" égal à la valeur de l'incrément:

$cpt = incrément du nom de fichier, puis:
$tab = array("cpt"=>$cpt,"nom"=>$Entry,"duree"=>$temps,"taille"=>$taille)

Ensuite, le sort($tab) trie le tableau comme je le souhaite.

Merci de vos réponses,

xpatval

Lien vers le commentaire
Partager sur d’autres sites

En regardant rapidement la doc php, j'ai vu une méthode http://fr.php.net/manual/fr/function.uasort.php qui permet de passer un délégué pour trier ton tableau de la manière dont tu souhaites.

Définis juste une fonction qui compare machin_2 et machin_11 selon ton ordre (en enlevant "amchin_" à la chaine et en comparant les entiers par exemple)

Je ne sais pas en PHP, mais dans d'autres langages c'est la manière préconisée dans le cadre de bonnes pratiques de tri de tableau. Pas besoin de t'embêter à implémenter un tri à bulles foireux :P

Stéphane.

Lien vers le commentaire
Partager sur d’autres sites

Il est peut-être encore temps de remplacer les nom_fichier_1 par des nom_fichier_01 ?

Ma tactique est d'éviter de créer des problèmes plutôt que de les résoudre. ;)

Jean-Luc

Lien vers le commentaire
Partager sur d’autres sites

Il est peut-être encore temps de remplacer les nom_fichier_1 par des nom_fichier_01 ?

Ma tactique est d'éviter de créer des problèmes plutôt que de les résoudre. ;)

malheureusement (pour moi), ce ne fut pas possible, et ça ne le sera pas.

Quant à uasort, je vais tester...

xpatval

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...