[Zend] affichage complexe dans un tableau

Eléphant du PHP | 107 Messages

08 janv. 2010, 10:52

Bonjour

je suis bloqué sur une affichage des données venant de la base de donnée.
Je m'explique

Les colonnes du tableau sont stockés en ligne dans une table(colonnes) :
je les récupères et j'obtient les tableaux suivants :

Code : Tout sélectionner

[_data:protected] => Array ( [0] => Array ( [id] => 1 [libelle_column] => Client id [id_table_cible] => 1 ) [1] => Array ( [id] => 2 [libelle_column] => Last name [id_table_cible] => 1 ) [2] => Array ( [id] => 3 [libelle_column] => First name [id_table_cible] => 1 ) )
Je récupère aussi les valeurs correspondantes aux colonnes depuis une autre table et j'obtient le tableau de la forme suivant :

Code : Tout sélectionner

[_data:protected] => Array ( [0] => Array ( [id_value] => 1 [id_enreg] => 1 [id_column] => 1 [text_value] => 007 ) [1] => Array ( [id_value] => 2 [id_enreg] => 1 [id_column] => 2 [text_value] => jean ) [2] => Array ( [id_value] => 3 [id_enreg] => 1 [id_column] => 3 [text_value] => dubois ) [3] => Array ( [id_value] => 4 [id_enreg] => 2 [id_column] => 1 [text_value] => 008 ) [4] => Array ( [id_value] => 5 [id_enreg] => 2 [id_column] => 2 [text_value] => francois ) [5] => Array ( [id_value] => 6 [id_enreg] =>2 [id_column] => 3 [text_value] => pierre ) )
Dans cette tableau de valeur l'indice id_column correspond à l'id de la colonne de la table colonnes
c'est a dire id_column=>3 correspond au First name et ce sera placé en deuxieme ligne pour l'affichage dans le tableau id_enreg =2

Si c'est id_enreg = 1 l'affichage est en première ligne et ainsi de suite

Et un autre table pour référence les lignes de résultats

Code : Tout sélectionner

Array ( [0] => Array ( [id_enreg] => 1 [description] => first recording ) [1] => Array ( [id_enreg] => 2 [description] => second recording ) )


Ce que je voudrais faire c'est de pouvoir faire comme ceci à l'affichage




Code : Tout sélectionner

Client id First name Last name 007 jean dubois 008 francois pierre

Ma question est que est ce que je doit construire un tableau finale qui regroupe le colonne avec les valeurs correspondants avant de faire un foreach ou à partir des ces tableaux la je peux déjà faire un affichage comme dessus

j'ai tenté avec le boucle foreach mais sans succès, merci pour votre aide et conseil

Eléphant du PHP | 107 Messages

12 janv. 2010, 11:44

Une reponse : :D

On range d'abord les données dans un autre tableau
$listeDonnee = array (
  array (
    'id_value' => 1,
    'id_enreg' => 1,
    'id_column' => 1,
    'text_value' => '007',
  ),
  array (
    'id_value' => 2,
    'id_enreg' => 1,
    'id_column' => 2,
    'text_value' => 'jean',
  ),
  array (
    'id_value' => 3,
    'id_enreg' => 1,
    'id_column' => 3,
    'text_value' => 'dubois',
  ),
  array (
    'id_value' => 4,
    'id_enreg' => 2,
    'id_column' => 1,
    'text_value' => '008',
  ),
  array (
    'id_value' => 5,
    'id_enreg' => 2,
    'id_column' => 2,
    'text_value' => 'francois ',
  ),
  array (
    'id_value' => 6,
    'id_enreg' => 2,
    'id_column' => 3,
    'text_value' => 'pierre',
  ),
);
 
$tabDonnee = array();
 
foreach ($listeDonnee as $donnee) {
    $id_enreg = $donnee['id_enreg'];
    
    if (!isset($tabDonnee[$id_enreg])) {
        $tabDonnee[$id_enreg] = array();
    }
    
    $tabDonnee[$id_enreg][$donnee['id_column']] = $donnee['text_value'];
}
Pour les colonnes et lignes
$listeLigne = array (
  array (
    'id_enreg' => 1,
    'description' => 'first recording',
  ),
  array (
    'id_enreg' => 2,
    'description' => 'second recording',
  ),
);
 
$listeColonne = array (
  array (
    'id' => 1,
    'libelle_column' => 'Client id',
    'id_table_cible' => 1,
  ),
  array (
    'id' => 2,
    'libelle_column' => 'Last name',
    'id_table_cible' => 1,
  ),
  array (
    'id' => 3,
    'libelle_column' => 'First name',
    'id_table_cible' => 1,
  ),
);

pour l'affichage
<table border="1">
    
    <?php foreach ($listeLigne as $ligne) {?>
        
        <tr>
            
            <?php foreach ($listeColonne as $colonne) {?>
                <td>
                    <?php echo $tabDonnee[$ligne['id_enreg']][$colonne['id']];?>
                </td>
            <?php }?>
            
        </tr>
        
    <?php }?>
    
</table>
voili voilou :-)

Petit nouveau ! | 1 Messages

13 mars 2010, 15:14

salut,
j'ai po encore tester ça dans mon problème, j'ai déjà utilisé la meme boucle avec while ms ça n'a pas marché :( , j'aimerais bien savoir la différence entre while et foreach :)