Trier un tableau en PHP

michel.leonard

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.
 

spout

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);
?>
 

michel.leonard

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
 

spout

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
 

YoyoS

WRInaute accro
Et pourquoi pas faire un Order by length(Description) dans ta requête qui construit ce tableau ?
 

michel.leonard

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).
 

michel.leonard

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
 

michel.leonard

WRInaute occasionnel
Code:
$query = "SELECT *
FROM `liste_opens`
WHERE `PGN` LIKE \"%$chercher%\"
Order by length(PGN)
";
et cela fonctionne...

MERCI c'était si simple...
 

spout

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