Tri tableau en fonction de données d'un autre tableau

myarray
Invité n'ayant pas de compte PHPfrance

24 janv. 2013, 16:47

Bonjour à tous,

Je rencontre quelques difficultés à trier un tableau.

Je souhaiterai trier un tableau en fonction d'un autre tableau de données. Voici un exemple concret :

Voici un tableau $month contenant l'ordre des mois dans lequel doivent apparaitre mes données :

Code : Tout sélectionner

Array ( [0] => 2 [1] => 1 [2] => 12 [3] => 11 [4] => 10 [5] => 9 [6] => 8 [7] => 7 [8] => 6 [9] => 5 [10] => 4 [11] => 3 )
Et voici mon tableau $data (tableau contenant les données à afficher) :

Code : Tout sélectionner

Array ( [0] => Array ( [2] => 927.085 [1] => 362.34 [11] => 1493.91 [10] => 1358.1 [9] => 1113.642 [8] => 1086.48 [7] => 950.67 [5] => 679.05 [4] => 543.24 [3] => 407.43 [12] => 1339.992 [6] => 796.752 ) [1] => Array ( [2] => 1509.275 [1] => 579.744 [12] => 2716.2 [11] => 2489.85 [10] => 2263.5 [9] => 2037.15 [8] => 1810.8 [7] => 1584.45 [6] => 1358.1 [5] => 1131.75 [3] => 679.05 [4] => 905.4 ) [2] => Array ( [2] => 2237.943 [1] => 851.499 [12] => 4019.976 [11] => 3684.978 [10] => 3349.98 [9] => 3014.982 [8] => 2679.984 [7] => 2344.986 [6] => 2009.988 [5] => 1674.99 [4] => 1339.992 [3] => 1004.994 ) )
Mon tableau $data contient chaque mois et une somme mais parfois dans un ordre différent de celui définit dans $month.

Je souhaiterai modifier l'ordre de certains éléments du tableau $data afin que cela corresponde à l'ordre des mois définit dans $month.

En fait, je souhaiterai obtenir ce résultat :

Code : Tout sélectionner

Array ( [0] => Array ( [2] => 927.085 [1] => 362.34 [12] => 1339.992 [11] => 1493.91 [10] => 1358.1 [9] => 1113.642 [8] => 1086.48 [7] => 950.67 [6] => 796.752 [5] => 679.05 [4] => 543.24 [3] => 407.43 ) [1] => Array ( [2] => 1509.275 [1] => 579.744 [12] => 2716.2 [11] => 2489.85 [10] => 2263.5 [9] => 2037.15 [8] => 1810.8 [7] => 1584.45 [6] => 1358.1 [5] => 1131.75 [4] => 905.4 [3] => 679.05 ) [2] => Array ( [2] => 2237.943 [1] => 851.499 [12] => 4019.976 [11] => 3684.978 [10] => 3349.98 [9] => 3014.982 [8] => 2679.984 [7] => 2344.986 [6] => 2009.988 [5] => 1674.99 [4] => 1339.992 [3] => 1004.994 ) )
Merci à tous pour votre aide :)

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

25 janv. 2013, 01:41

salut,

le principe est assez simple.
Tu parcours le tableau des données pour en reconstruire un autre (donc foreach + une variable)
pour chaque élément tu parcours le tableau avec l'ordre des mois pour récupérer l'info dans l'élément actuel et le mettre dans le nouveau tableau
<?php

$tableauMois = array(); // le tableau qui contient l'ordre des mois
$tabeleauData = array(); // celui des données (donc a deux dimension)
$tableauFinal = array(); // logique ;)

// parcourt du tableau des données
foreach($tableauData as $key => $data) {
	// $data est un tableau
	$tmp = array();
	foreach($tableauMois as $mois) {
		if(isset($data[$mois]) {
			$tmp[$mois] = $data[$mois];
		}
	}
	$tableauFinal[$key] = $tmp;
}
?>
par contre vu que c'est des clefs numérique, je serais toi, je garderais cela pour l'affichage ;) (donc afficher plutôt que d'utiliser $tmp).


@+
Il en faut peu pour être heureux ......

myarray
Invité n'ayant pas de compte PHPfrance

25 janv. 2013, 16:10

Salut moogli,

Merci pour ton aide ! ;-)