tris sur colonnes

Le
Y a personne
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
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Bruno Desthuilliers
Le #67164
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.


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

thib´
Le #67165
Y a personne wrote:
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


<?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
Le #67166

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

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

Olivier Miakinen
Le #67163
Le 17/01/2008 00:50, Bruno Desthuilliers répondait à Y a personne :

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.

Publicité
Poster une réponse
Anonyme