Page 1 sur 1

Tri tableau 2D avec array_multisort

Posté : 11 août 2014, 17:46
par jacfev
Bonjour,

// Le tableau $tab_liste1 est un tableau à 2 dimensions construit comme ceci
// issu d'une Base de donnée,
// la table articles :
// Machine | Code | Detail | Prix | Quantite
// M1 | C1 | D1 | P1 | Q1
// M2 | C2 | D2 | P2 | Q2
// M3 | C3 | D3 | P3 | Q3

//Cette table s'affiche sur la page web dans l'ordre de la table de la BdD (normal !)
// NOTA: je ne vous détaille pas l'affichage HTML pour simplifier

//Ma question: je voudrais la trier pour qu'elle s'affiche sur la page web:
// dans l'ordre décroissant de Detail
// donc pour obtenir ceci :
// Machine | Code | Detail | Prix | Quantite
// M3 | C3 | D3 | P3 | Q3
// M2 | C2 | D2 | P2 | Q2
// M1 | C1 | D1 | P1 | Q1
J'utilise la fonction array_multisort()
// construction du tableau 2D
$tab_liste1[] = array(0 => 'M1', 1 => 'C1', 2 => 'D1', 3 => 'P1', 4 => 'Q1');
$tab_liste1[] = array(0 => 'M2', 1 => 'C2', 2 => 'D2', 3 => 'P2', 4 => 'Q2');
$tab_liste1[] = array(0 => 'M3', 1 => 'C3', 2 => 'D3', 3 => 'P3', 4 => 'Q3');
echo '<pre>'; print_r ($tab_liste1); echo '</pre>'; // pour TESTs
$i = 0;
foreach ($tab_liste1 as $key => $row) // pour TESTs
{
	//echo "\$key =	".$key." | "."\$row= ".$row.'<br>'; //Affiche: $key =	0... | $row= Array
	//echo "\$tab_liste1[$i]: <br>";
	$detail = $tab_liste1[$i][2];
	foreach ($row as $key2 => $valeur) 
	{
		echo "\$key2 =	".$key2." | "."\$valeur= ".$valeur.'<br>';
	}
	$i++;
}
array_multisort($tab_liste1, $tab_liste1[][2], SORT_DESC);
echo '<pre>'; print_r ($tab_liste1); echo '</pre>'; // pour TESTs
Mais ça ne marche pas.
Help please :?:
Cordialement
jf.
---

Re: Tri tableau 2D avec array_multisort

Posté : 11 août 2014, 19:10
par jacfev
J'ai trouvé :D (aidé par distrikt26 et de niuxe qui ont déjà traité un sujet similaire "Rendez à César ce qui appartient à César"),
en fait il faut partir d'un tableau associatif
je vous donne ma solution:
// construction du tableau ASSOCIATIF 2D 
$tab_liste1[] = array('machine' => 'M1', 'code' => 'C1', 'detail' => 'D1', 'prix' => 'P1', 'quantite' => 'Q1');
$tab_liste1[] = array('machine' => 'M2', 'code' => 'C2', 'detail' => 'D2', 'prix' => 'P2', 'quantite' => 'Q2');
$tab_liste1[] = array('machine' => 'M3', 'code' => 'C3', 'detail' => 'D3', 'prix' => 'P3', 'quantite' => 'Q3');
echo '<pre>'; print_r ($tab_liste1); echo '</pre>'; // pour TESTs
foreach ($tab_liste1 as $key => $row) // pour TESTs
{
	$detail[$key] = $row['detail'];
}
array_multisort($detail, SORT_DESC, $tab_liste1);
echo '<pre>'; print_r ($tab_liste1); echo '</pre>'; // pour TESTs
Il me reste à modifier ma méthode de récupération des données provenant de la Base.
À+

Re: [RESOLU] Tri tableau 2D avec array_multisort

Posté : 11 août 2014, 22:12
par toytoy
Sinon tu peux aussi directement le faire dans ta requête, puisque tu explique que ton tableau est issus d'une bdd. SQL: ORDER BY nom_colonne

Re: [RESOLU] Tri tableau 2D avec array_multisort

Posté : 12 août 2014, 09:28
par jacfev
Sinon tu peux aussi directement le faire dans ta requête, puisque tu explique que ton tableau est issus d'une bdd. SQL: ORDER BY nom_colonne
Ça ok toytoy, mais
ce que j'ai besoin c'est que l'utilisateur ait le choix du tri (je n'en ai ici cité qu'un parmi plusieurs)
et si je repast de la BdD il faudra à chaque fois que je reconstruise mon tableau html d'affichage.
Bon, ton idée est peut être meilleure, mais je n'ai pas envie de refaire tout le code.
J'y penserai à l'avenir à ta solution
Mais quand même cette fonction array_multisort est tout de même séduisante non !
Merci de t'intéresser à mon sujet

Cordialement
jf.
---