Tri PHP

Fermé
Wyti Messages postés 8 Date d'inscription mardi 19 août 2008 Statut Membre Dernière intervention 4 septembre 2008 - 4 sept. 2008 à 15:40
Alain_42 Messages postés 5358 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 - 4 sept. 2008 à 19:58
Bonjour,
Je suis à la recherche d'un moyen pour comparer 2 chaines (parmi une 20aine contenues dans un tableau) et de savoir laquelle est la première dans l'ordre alphabétique.
à cause de certaines circonstances (par exemple certaines chaines même une fois triés doivent toujours se suivre) je ne peux pas utiliser les fonctions Sort() de php.

Exemple de ce que je voudrais :
if $chaine[1] est avant $chaine[2]
instructions
......

merci d'avance.

3 réponses

Alain_42 Messages postés 5358 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 903
4 sept. 2008 à 16:01
Salut,

une solution:

<?php
$chaine1="blabla";
$chaine2="tototiti";
foreach($chaine as $cle=>$value){
	if($value==$chaine1) $pos_chaine1=$cle;
	if($value==$chaine2) $pos_chaine1=$cle;
	
}
if($pos_chaine1 < $pos_chaine2){
//la suite

}
?>


@lain
0
Wyti Messages postés 8 Date d'inscription mardi 19 août 2008 Statut Membre Dernière intervention 4 septembre 2008
4 sept. 2008 à 17:48
Euh merci mais comme je te l'ai dit mon tableau contient environ une 20aine de chaines, de plus il est impossible de connaitre dans quel ordre elles sont écrites (varie entre 2 générations de la page)
d'ailleurs il ne contiendra pas tout le temps 20 chaines, ce nombre doit pouvoir varier, et ta méthode n'est malheureusement pas assez extensible.
0
Alain_42 Messages postés 5358 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 903
4 sept. 2008 à 18:27
Comment ça elle n'est pas extensible ?

si $chaine est l'array qui contient toutes tes chaines

on recherche bien dans tout l'array l'ordre ou les deux sont trouvees
0
Wyti Messages postés 8 Date d'inscription mardi 19 août 2008 Statut Membre Dernière intervention 4 septembre 2008
4 sept. 2008 à 19:44
Oui bien sûr ta boucle est juste le problème c'est ton $value=$chaine2
imaginons que j'aie 260 chaines alors il me faudrait 260 if dans la boucle ce qui est très moyen niveau extensibilité et pire encore je ne dois pas pouvoir prédire la nombre de chaines contenues dans ce tableau donc il me faudrait plus un if qui compare 2 chaines et qui puisse extraire la chaine avant dans l'ordre alphanumérique
0
Alain_42 Messages postés 5358 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 903
4 sept. 2008 à 19:58
Alors tu n'as rien compris au principe:

par la boucle foreach on parcours TOUT l'array $chaine même si il y en a 200

pour chaque passage de la boucle on compare la valeur du pas de l'array qui est $value à la chaine a trouver


foreach($chaine as $cle=>$value)

veut dire pour chaque entree de l'array mettre la cle dans $cle et la valeur dans $value

et ensuite on travaille dessus

@lain
0