Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

tris sur colonnes

4 réponses
Avatar
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

4 réponses

Avatar
Bruno Desthuilliers
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é).

Avatar
thib´
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´

Avatar
Olivier Miakinen

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

Avatar
Olivier Miakinen
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.