Trier un tableau en PHP

WRInaute occasionnel
Bonjour à tous, je vous expose mon léger problème,

ne m'en voulez pas si il y a (probablement une erreur).

J'ai une boucle qui va chercher 4 valeurs (associées entre elles dans ma base de données), et elle crée un tableau comme suit:

Code:
Array ( 
[0] => TITRE => DESCRIPTION => SOUSTITRES => NUMERO 
[1] => TITRE => DESCRIPTION => SOUSTITRES => NUMERO 
[2] => TITRE => DESCRIPTION => SOUSTITRES => NUMERO 
et ainsi de suite )

et j'aimerai trier ce tableau par taille(en nombre de caractères) des DESCRIPTION croissantes ... en gardant les associations... evidemment...
mais la je lis toutes les fonctions PHP, j'essaye depuis du temps, mais je ne trouve pas, un coup de pouce ?

Merci de m'aider si vous le pouvez

Cordialement. Mike.
 
WRInaute accro
http://php.net/manual/fr/function.array-multisort.php

Principalement l'exemple où il est écrit:
Nous avons un tableau de lignes, mais array_multisort() nécessite un tableau de colonnes, donc nous utilisons le code suivant pour obtenir les colonnes et ainsi effectuer le tri.

Code:
<?php
// Obtient une liste de colonnes
foreach ($data as $key => $row) {
    $volume[$key]  = $row['volume'];
    $edition[$key] = $row['edition'];
}

// Trie les données par volume décroissant, edition croissant
// Ajoute $data en tant que dernier paramètre, pour trier par la clé commune
array_multisort($volume, SORT_DESC, $edition, SORT_ASC, $data);
?>
 
WRInaute occasionnel
J'avais déjà lu cet article en plus, je vais le re-relire... Merci de me mettre sur la piste .
En fait dans l'exemple du manuel il n'y à que 2 valeurs associées, c'est probablement pour ca que je bute.
Cordialement
 
WRInaute accro
Tu vas peut être devoir faire un foreach() sur ton tableau afin d'y ajouter un champ "description_size".

Simple exemple, je ne connais pas ton array:
Code:
foreach($array as $k => $a){
$array[$k]['description_size'] = strlen($k['description']);
}
Ou directement dans la boucle de l'exemple de php.net
 
WRInaute accro
Et pourquoi pas faire un Order by length(Description) dans ta requête qui construit ce tableau ?
 
WRInaute occasionnel
ok , je teste, pour l'aspect pratique du sujet , je te montre mon tableau original

C'est une base de données d'ouvertures d'échecs ou ECO est un code standard , PGN est la notation standard de la partie , Titre est le nom du premier Maître à avoir joué la position et ART est le numéro de l'article que j'ai écrit a ce sujet.

Code:
$query = "SELECT *
FROM `liste_opens`
WHERE `PGN` LIKE \"%$chercher%\"";

$result = mysql_query($query);

$z = -1;
while ($row = mysql_fetch_assoc($result)) {
 $z = $z+1;
 $a = $row["ECO"];
 $b = $row["PGN"];
 $c = $row["TITRE"];
 $d = $row["ART"];
 
 $tabl[$z] = "$a => $b => $c => $d";
}

et là ... je réfléchis pour trier selon la taille de $b croissant...

(c'était pour montrer l'aspect pratique).
 
WRInaute occasionnel
YoyoS a dit:
Et pourquoi pas faire un Order by length(Description) dans ta requête qui construit ce tableau ?

je ne connais pas encore tout, merci , je me renseigne à ce sujet, c'est agréable d'avoir des personnes qui mettent sur de bonnes pistes... amicalement
 
WRInaute occasionnel
Code:
$query = "SELECT *
FROM `liste_opens`
WHERE `PGN` LIKE \"%$chercher%\"
Order by length(PGN)
";
et cela fonctionne...

MERCI c'était si simple...
 
WRInaute accro
Impec, je ne savais pas que ton tableau sortait de 1 seule requête SQL :)
C'est bcp mieux ainsi
 
Discussions similaires
Haut