Tri d'un tableau personnalisé

Eléphanteau du PHP | 38 Messages

28 mai 2013, 11:20

Bonjour,

J'aimerai trier un tableau d'une mannière complètement subjective sans logique.
J'ai vu qu'il faut utiliser usort avec une fonction de comparaison mais je sais pas comment faire ma fonction de comparaison.

Exemple :
$tab = array(1=>'Toto',2=>'Tata',3=>'Titi',4=>'Tutu');
usort($a, "cmp");
Je voudrais que mon tableau soit trié en fonction des clés de cette mannière : D'abord la clé 3 puis la 2 puis la 4 puis la 1. (ça n'a aucun sens mais c'est normal c'est hors contexte).
Comment faire ma fonction cmp ?
function cmp($a, $b)
{
    if ($a == $b) {
        return 0;
    }
    return ($a < $b) ? -1 : 1;
}
Merci !

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

28 mai 2013, 15:05

salut,

il faut trouver une logique si tu veux utiliser cette fonction.

- est ce que tu n'a que 4 index ?
- est ce vraiment utile de trier ?

Si tu répond oui à la première question tu peux très bien utiliser directement les index
$tmp[1] = $tab[3];
$tmp[2] = $tab [2];
etc
$tab = $tmp;

si tu ne peux pas trouver une règle de gestion pour ordonner le tableau tu ne pourras pas le faire avec cette fonction.

Tu peux le faire avec deux un deuxième tableau qui contiendra l'ordre des clefs.
par exemple
<?php
$ordre = [3,2,4,1];
$tab = array(1=>'Toto',2=>'Tata',3=>'Titi',4=>'Tutu');
foreach($ordre as $index) {
    $final[] = $tab[$index];
}
?>
@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 38 Messages

28 mai 2013, 16:28

mmm, c'est bien ce que je pensais, sans logique, faut le faire à la main. Actuellement, je faisais comme avec le tableau d'ordre. J'ai pas que 4 valeurs j'en ai 11 actuellement. C'est en faite une liste de rôles sur des fiches films, aujourd'hui je tri mes roles par ordre alpha, mais j'ai décidé de les trier par ordre d'important. Réalisateurs, Musique, acteurs principaux etc. et donc je tri en fonction de l'id role totalement sans aucune logique :)

Mammouth du PHP | 619 Messages

28 mai 2013, 16:34

Bonjour,

Si c'est informations sont en base tu peux peut-être ajouter un champ order puis order by ordre

Mammouth du PHP | 2278 Messages

29 mai 2013, 09:49

Jette un coup d'oeil sur ksort. Il me semble que ça ferait l'affaire.
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD