Discussion:
tris sur colonnes
(trop ancien pour répondre)
Y a personne
2008-01-16 16:37:14 UTC
Permalink
Bonjour,

j'ai un tableau de ce type ci :

Array
(
[0] => Array
(
[id] => 17
[date] => 2007-05-14
[type] => voiture
[marque] => volvo
[prix] => 1852.14
)

[1] => Array
(
[id] => 22
[date] => 2006-01-24
[type] => camion
[marque] => renault
[prix] => 10487.95
)

...
)

Je voudrais trier par prix et aussi sur plusieurs colonnes.

j'ai tester avec array_multisort mais je ne m'en sort pas.

merci de votre aide
Bruno Desthuilliers
2008-01-16 23:50:16 UTC
Permalink
Post by Y a personne
Bonjour,
Array
(
[0] => Array
(
[id] => 17
[date] => 2007-05-14
[type] => voiture
[marque] => volvo
[prix] => 1852.14
)
[1] => Array
(
[id] => 22
[date] => 2006-01-24
[type] => camion
[marque] => renault
[prix] => 10487.95
)
...
)
Je voudrais trier par prix et aussi sur plusieurs colonnes.
j'ai tester avec array_multisort mais je ne m'en sort pas.
Si tes données viennent d'une base SQL, il serait plus efficace de lui
laisser faire le travail.

Sinon, il y a un example de ce que tu veux dans la doc de
array_multisort. En supposant que ton tableau de départ s'appelle
'$annonces', et que tu veuilles trier par prix ascendant, date
descendante, le code suivant devrait être dans l'idée:

$prix = array();
$dates = array()

foreach($annonces as $index=>$annonce) {
$prix[$index] = $annonce['prix'];
$dates[$index] = annonce['date'];
}

array_multisort($prix, SORT_ASC, $dates, SORT_DESC, $annonces);

(NB : non testé).
Olivier Miakinen
2008-01-17 00:30:22 UTC
Permalink
Post by Bruno Desthuilliers
Si tes données viennent d'une base SQL, il serait plus efficace de lui
laisser faire le travail.
Ah, je voulais le dire aussi dans ma réponse, mais j'ai oublié de le
faire avant de cliquer sur Envoi. Merci de l'avoir fait.

thibŽ
2008-01-16 23:50:16 UTC
Permalink
Post by Y a personne
Bonjour,
Array
(
[0] => Array
(
[id] => 17
[date] => 2007-05-14
[type] => voiture
[marque] => volvo
[prix] => 1852.14
)
[1] => Array
(
[id] => 22
[date] => 2006-01-24
[type] => camion
[marque] => renault
[prix] => 10487.95
)
...
)
Je voudrais trier par prix et aussi sur plusieurs colonnes.
j'ai tester avec array_multisort mais je ne m'en sort pas.
merci de votre aide
<?php
foreach( $ton_tableau as $key => $value ) {
$prix[$key] = $value['prix'];
// autres lignes à convertir en colonnes
}

array_multisort($prix, /*autres colonnes de tri, */ $ton_tableau);
print_r($ton_tableau);
?>

C'est hautement inspiré de l'exemple #3 du man' ;)

-thib´
Olivier Miakinen
2008-01-16 23:50:16 UTC
Permalink
Post by Y a personne
Array
(
[0] => Array
(
[id] => 17
[date] => 2007-05-14
[type] => voiture
[marque] => volvo
[prix] => 1852.14
)
[1] => Array
(
[id] => 22
[date] => 2006-01-24
[type] => camion
[marque] => renault
[prix] => 10487.95
)
...
)
Je voudrais trier par prix et aussi sur plusieurs colonnes.
Un truc comme ceci devrait marcher (non testé) :

function compare($a, $b)
{
if ($a['prix'] != $b['prix']) {
/* Les prix sont différents, ce critère suffit */
return $a['prix'] - $b['prix'];
}
/* les prix sont égaux, on trie sur l'id (par exemple) */
return $a['id'] - $b['id'];
}
usort ($tableau, "compare");

http://fr2.php.net/manual/fr/function.usort.php
Post by Y a personne
j'ai tester avec array_multisort mais je ne m'en sort pas.
Ce n'est visiblement pas fait pour ça. D'après ce que j'en comprends de
la doc, la fonction array_multisort sert quand les critères de tri sont
dans des tableaux différents (mais de même longueur).
Continuer la lecture sur narkive:
Loading...