Bonjour,
Y a-t-il une fonction permettant de transposer un tableau ?
Merci
Version imprimable
Bonjour,
Y a-t-il une fonction permettant de transposer un tableau ?
Merci
Salut,
tu veux dire quoi par 'transposer' ?
Salut,
La transposition consiste à inverser lignes et colonnes.
Par exemple, le tableau suivant :
donnera, une fois transposé :Citation:
1 a b c
2 d e f
3 g h i
Cela existe sous Excel (en collage spécial)Citation:
1 2 3
a d g
b e h
c f i
Je crois pas qu'il y est de fonction mais tu dois pouvoir trouver l'algorithme non ?
Si tu récupères les premières cases de chaque ligne ([0]), tu les mets dans un tableau, que tu mets à la première ligne du tableau transposé...et ainsi de suite pour toutes les lignes.
Oui, bien sûr, ca devrait pas être trés compliqué. Mais si php pouvait me le faire en une ligne, ça aurait été encore plus simple.Citation:
Envoyé par Elwyn
Comme le tableau d'origine est, en fait, un recordset, je vais devoir créer un tableau supplémentaire.
Bon, ben, j'ai plus qu'à m'y mettre :P
j'm'ennuyais ;o)
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32 <?php $liste=array( array(1,2,3,4,5), array(6,7,8,9,10), array(11,12,13,14,15), ); $tab=array(); foreach($liste as $value) { foreach($value as $k=>$v) { $tab[$k][]=$v; } } function affiche($tableau) { echo '<table border=1>'; foreach($tableau as $ligne) { echo '<tr>'; foreach($ligne as $element) { echo "<td>$element</td>"; } echo '</tr>'; } echo '</table>'; } affiche($liste); echo '<br>'; affiche($tab); ?>
Par contre, je ne suis pas contre un coup de main sur la structure du tableau final parce que, la syntaxe des tableaux imbriqués, c'est pas mon fort :?
Dans mon cas, le recordset remonte, par mois, disons une quantité (d'essence), un kilométrage, le nom de la pompe et une consommation :
Les noms des colonnes ne faisant pas partie du recordset, bien sûr.Citation:
Mois | Vol | Kms | Pompe | Conso
1 | 50 | 650 | Esso | 7.7
2 | 45 | 630 | BP | 7.14
3 | 56 | 700 | Esso | 8
...
Je voudrais obtenir quelque chose du genre :
La valeur des mois n'étant pas "récupérée" puisqu'elle correspond à l'ordre naturel des données. Par exemple, pour 'Vol', la valeur 50 correspond au mois 1, 45 au mois 2, 56 au mois 3, etc.Code:
1
2
3 $tab('Vol' => (50, 45, 56, ...), 'Kms' => (650, 630, 700, ...), 'Pompe' => ('Esso', 'BP', 'Esso', ...), 'Conso' => (7.7, 7.14, 8, ...))
Pour ajouter une donnée je feraisComment je déclare ce tableau au début ?Code:$tab['Vol'][] = $Valeur; // 56 par exemple pour la 3ème ligne
Suffit de remplacer:
par :Code:
1
2
3 foreach($value as $k=>$v) { $tab[$k][]=$v; }
Code:
1
2
3 foreach($value as $k=>$v) { $tab[$colonnes[$k]][]=$v; }
et de définir avant :
dans l'ordre de la requete SQLCode:$colonnes=array("Mois", "Vol", "km", ...);
J'avais trouvé avecJe vais essayer la méthode de Fladnag qui me semble bien plus propre et plus générique :-)Code:
1
2
3
4
5
6
7
8
9
10
11
12 $rsStat = mysql_query... //Les 2 syntaxes suivantes fonctionnent //$tabStat = array('Kms' => array(), 'Volume' => array(), 'Pompe' => array()); $tabStat = array(); while($rowStats = mysql_fetch_array($rsStats)) { $tabStat['Kms'][] = $rowStats['Kms']; $tabStat['Volume'][] = $rowStats['Volume']; $tabStat['Pompe'][] = $rowStats['Pompe']; }
si le code que tu as donné au dessus fonctionne, on peut faire plus rapide encore ;o)
Code:
1
2
3
4
5
6 $tabStat=array(); while($rowStats = mysql_fetch_assoc($rsStats)) { foreach($rowStats as $k=>$v) { $tabStat[$k][]=$v; } }
Ca marche nickel ! :merci:
Récapitulatif :
1 - La requete doit avoir des Alias si les noms des champs ne sont pas suffisant tels quels :2 - La création du recordset :Code:
1
2 $strSQL = 'SELECT RIGHT(Cvh_Periode, 2) AS Mois, SUM(Cvh_Kms) AS Kms, ROUND(SUM(Cvh_Litres), 2) AS Volume...
3 - Le code de Fladnag :Code:$rsStats = mysql_query...
Et c'est parfait ! :mrgreen:Code:
1
2
3
4
5
6
7 // Création du tableau transposé $tabStat=array(); while($rowStats = mysql_fetch_assoc($rsStats)) { foreach($rowStats as $Colonne => $Valeur) $tabStat[$Colonne][] = $Valeur; }
Je n'ai pas mis le résultat du recordset mais la transposition est bonne.Citation:
// Print_r($tabStats) donne
Array (
[Mois] => Array ( [0] => 01 [1] => 02 [2] => 03 [3] => 04 [4] => 05 ... )
[Kms] => Array ( [0] => 10804 [1] => 1682805 [2] => 2062028 [3] => 7901718 ...)
[Volume] => Array ( [0] => 222.86 [1] => 148468.16 [2] => 35209.00 [3] => 82335.05 [4] => 50483.72 [5] => 89156.45 ...)
)
Il ne reste plus qu'à la mettre dans la FAQ (sérieux, ça manque)
:wink: