[RESOLU] Tri tableau 2D avec array_multisort

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] Tri tableau 2D avec array_multisort

Re: [RESOLU] Tri tableau 2D avec array_multisort

par jacfev » 12 août 2014, 09:28

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

Re: [RESOLU] Tri tableau 2D avec array_multisort

par toytoy » 11 août 2014, 22:12

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: Tri tableau 2D avec array_multisort

par jacfev » 11 août 2014, 19:10

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.
À+

Tri tableau 2D avec array_multisort

par jacfev » 11 août 2014, 17:46

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