IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Séparation d'un tableau php en plusieurs parties


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Homme Profil pro
    Webmaster
    Inscrit en
    Juillet 2015
    Messages
    518
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juillet 2015
    Messages : 518
    Points : 184
    Points
    184
    Par défaut Séparation d'un tableau php en plusieurs parties
    Salut à tous

    Voila, j'ai un tableau php pour mes pièces automobile. Il fonctionne parfaitement mais je souhaite faire des séparations entre les différentes pièces... par exemple une première partie pour les pièces de freins, une deuxième pour les filtres, etc.. Du genre :

    Voila a quoi je souhaite que cela ressemble de visuel :
    __________
    Freins :
    - Disques de frein
    - Plaquettes de frein
    __________
    Eclairage :
    - Ampoule Narva R5W 12V 5W
    - Ampoule Narva P21W 12V
    __________
    Filtres :
    - Filtre a air
    - Filtre a huile
    - Filtre habitacle

    Voici mon code actuel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    $pieces[] = array('designation' => 'Ampoule Narva R5W 12V 5W', 'ref' => '', 'ht' => 0, 'qte' => 1, 'tva' => 20);
    $pieces[] = array('designation' => 'Ampoule Narva P21W 12V', 'ref' => '', 'ht' => 0, 'qte' => 1, 'tva' => 20);
    $pieces[] = array('designation' => 'Disques de frein', 'ref' => 'DF1533',  'ht' => 107.42, 'qte' => 1, 'tva' => 20);
    $pieces[] = array('designation' => 'Filtre a air', 'ref' => 'A1045',   'ht' => 17.50, 'qte' => 1, 'tva' => 20);
    $pieces[] = array('designation' => 'Filtre a huile', 'ref' => 'ELH4213', 'ht' => 9.92, 'qte' => 1, 'tva' => 20);
    $pieces[] = array('designation' => 'Filtre habitacle', 'ref' => 'MFELR7004', 'ht' => 13.38, 'qte' => 1, 'tva' => 20);
    $pieces[] = array('designation' => 'Plaquettes de frein', 'ref' => '598488',  'ht' => 53.17, 'qte' => 1, 'tva' => 20);
    $i = 0;
    foreach ($pieces as $piece) {
     
    echo '<div class="row">';
    echo '  <label class="col-xs-5 col-sm-4 col-md-4 control-label" for="piece_' . $i . '">' . $piece['designation'] . '</label> <input type="checkbox" name="piece_' . $i . '" id="piece_' . $i . '">' . '<input type="hidden" name="des_' . $i . '" id="des_' . $i . '" value="' . $piece['designation'] . '">';
    echo '  <div class="col-xs-4 col-sm-3 col-md-2">';
    echo '    <input type="text" class="form-control" name="ref_' . $i . '" id="ref_' . $i . '" value="' . $piece['ref'] . '">';
    echo '  </div>';
    echo '  <div class="col-xs-4 col-sm-3 col-md-2">';
    echo '    <input type="text" class="form-control" name="ht_' . $i . '" id="ht_' . $i . '" value="' . $piece['ht'] . '">';
    echo '  </div>';
    echo '  <div class="col-xs-3 col-sm-2 col-md-1">';
    echo '    <input type="text" class="form-control" name="qte_' . $i . '" id="qte_' . $i . '" value="' . $piece['qte'] . '">';
    echo '  </div>';
    echo '  <div class="col-xs-3 col-sm-2 col-md-1">';
    echo '    <input type="text" class="form-control" name="tva_' . $i . '" id="tva_' . $i . '" value="' . $piece['tva'] . '">';
    echo '  </div>';
    echo '</div>';
    $i++;
    }
     
    ?>
    Alors, il est évident qu'avant de demander de l'aide ici, j'ai cherché sur le net et j'ai même testé une fonction php array_slice mais sans savoir comment m'en servir (je débute) et sans même être sure qu'il s'agit bien de la fonctionnalité qu'il me faut. Donc je suis dans le flou. Je souhaite simplement une séparation entre les différentes pièces pour le coté esthétique..

    je vous remercie de votre aide.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Il n'y a pas de notion de catégorie dans ton tableau.
    Il faut ajouter un niveau supplémentaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $pieces['Eclairage'][] = array('designation' => 'Ampoule Narva R5W 12V 5W', 'ref' => '', 'ht' => 0, 'qte' => 1, 'tva' => 20);

  3. #3
    Membre habitué
    Homme Profil pro
    Webmaster
    Inscrit en
    Juillet 2015
    Messages
    518
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juillet 2015
    Messages : 518
    Points : 184
    Points
    184
    Par défaut
    Merci pour ta réponse.

    malheureusement cela ne fonctionne pas, j'ai des messages d'erreur :
    Notice: Use of undefined constant Eclairage - assumed 'Eclairage' in ...................

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu as oublié les apostrophes autour.

  5. #5
    Membre habitué
    Homme Profil pro
    Webmaster
    Inscrit en
    Juillet 2015
    Messages
    518
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juillet 2015
    Messages : 518
    Points : 184
    Points
    184
    Par défaut
    en effet mais même la j'ai des erreurs :

    Notice: Undefined index: designation in....
    Notice: Undefined index: ref in...
    Notice: Undefined index: ht in
    Notice: Undefined index: tva in...... etc

    le echo je le modif aussi ?
    si oui, de quelle façon :/

    merci à toi

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Il faut ajouter une boucle foreach autour de celle existante

  7. #7
    Membre habitué
    Homme Profil pro
    Webmaster
    Inscrit en
    Juillet 2015
    Messages
    518
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juillet 2015
    Messages : 518
    Points : 184
    Points
    184
    Par défaut
    Autour ?? C'est à dire ? Je débute et je ne comprends pas tout..
    Je ne te demande évidement pas de faire mon code mais au moins de m'indiquer la marche à suivre ou même des exemples.. Car "autour" je ne comprends rien..

  8. #8
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    foreach ($pieces as $categorie=>$values) {
          echo $categorie;
          foreach ($valuesas $piece) {
             echo '<div class="row">';
             echo '  <label class="col-xs-5 col-sm-4 col-md-4 control-label" for="piece_' . $i . '">' . $piece['designation'] . '</label> <input type="checkbox" name="piece_' . $i . '" id="piece_' . $i . '">' . '<input type="hidden" name="des_' . $i . '" id="des_' . $i . '" value="' . $piece['designation'] . '">';

  9. #9
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    le plus simple est peut-être de créer un autre array, contenant les nom des catégories.
    Pour chaque pièce, on indique l'index de la catégorie concernée.

    N.B. C'est le même principe qu'avec une table "categories" en base de données.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    <?php
    $categories = array( 1=>'Freins', 2=>'Eclairage', 3=>'Filtres' );
     
    $pieces[] = array('categorie'=> 2, 'designation' => 'Ampoule Narva R5W 12V 5W', 'ref' => '', 'ht' => 0, 'qte' => 1, 'tva' => 20);
    $pieces[] = array('categorie'=> 2, 'designation' => 'Ampoule Narva P21W 12V', 'ref' => '', 'ht' => 0, 'qte' => 1, 'tva' => 20);
    $pieces[] = array('categorie'=> 1, 'designation' => 'Disques de frein', 'ref' => 'DF1533',  'ht' => 107.42, 'qte' => 1, 'tva' => 20);
    $pieces[] = array('categorie'=> 3, 'designation' => 'Filtre a air', 'ref' => 'A1045',   'ht' => 17.50, 'qte' => 1, 'tva' => 20);
    $pieces[] = array('categorie'=> 3, 'designation' => 'Filtre a huile', 'ref' => 'ELH4213', 'ht' => 9.92, 'qte' => 1, 'tva' => 20);
    $pieces[] = array('categorie'=> 3, 'designation' => 'Filtre habitacle', 'ref' => 'MFELR7004', 'ht' => 13.38, 'qte' => 1, 'tva' => 20);
    $pieces[] = array('categorie'=> 1, 'designation' => 'Plaquettes de frein', 'ref' => '598488',  'ht' => 53.17, 'qte' => 1, 'tva' => 20);
    $i = 0;
    foreach ( $categories as $catid => $catnom )
    {
    	echo '<h5>'.$catnom.'</h5>'."\n";
    	foreach ( $pieces as $i => $piece )
    	{	
    		if( $piece['categorie'] == $catid){
    echo '<div class="row">'."\n";
    echo '  <label class="col-xs-5 col-sm-4 col-md-4 control-label" for="piece_' . $i . '">' . $piece['designation'] . '</label>'."\n";
    echo '    <input type="checkbox" name="piece_' . $i . '" id="piece_' . $i . '">'."\n";
    echo '    <input type="hidden" name="des_' . $i . '" id="des_' . $i . '" value="' . $piece['designation'] . '">'."\n";
    echo '  <div class="col-xs-4 col-sm-3 col-md-2"><input type="text" class="form-control" name="ref_' . $i . '" id="ref_' . $i . '" value="' . $piece['ref'] . '"></div>'."\n";
    echo '  <div class="col-xs-4 col-sm-3 col-md-2"><input type="text" class="form-control" name="ht_' . $i . '" id="ht_' . $i . '" value="' . $piece['ht'] . '"></div>'."\n";
    echo '  <div class="col-xs-3 col-sm-2 col-md-1"><input type="text" class="form-control" name="qte_' . $i . '" id="qte_' . $i . '" value="' . $piece['qte'] . '"></div>'."\n";
    echo '  <div class="col-xs-3 col-sm-2 col-md-1"><input type="text" class="form-control" name="tva_' . $i . '" id="tva_' . $i . '" value="' . $piece['tva'] . '"></div>'."\n";
    echo '</div>'."\n";
    		}
    	}
    }
    ?>
    N.B. ."\n"; permet un passage à la ligne dans le CODE (meilleure lisibilité du code).

    Par contre, il faut aussi penser à transmettre la catégorie !
    Ajouter dans le code ci-dessus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo '    <input type="hidden" name="cat_' . $i . '" id="cat_' . $i . '" value="' . $piece['categorie'] . '">'."\n";
    (On suppose ici que la catégorie de chaque pièce n'est pas modifiable via ce formulaire)
    Dernière modification par Invité ; 14/07/2015 à 12h22.

  10. #10
    Membre habitué
    Homme Profil pro
    Webmaster
    Inscrit en
    Juillet 2015
    Messages
    518
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juillet 2015
    Messages : 518
    Points : 184
    Points
    184
    Par défaut
    Salut jreaux62

    ton code fonctionne parfaitement bien et je te remercie de ton aide précieuse !

    dernière petite question :

    Pourquoi ceci : "Par contre, il faut aussi penser à transmettre la catégorie !" ?

    le code fonctionne déjà très bien sans rajouter la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    echo '    <input type="hidden" name="cat_' . $i . '" id="cat_' . $i . '" value="' . $piece['categorie'] . '">'."\n";
    faut t'il la mettre obligatoirement ? :/

  11. #11
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    le plus simple est peut-être de créer un autre array, contenant les nom des catégories.
    Moi je ne trouve pas ça efficace : on parcoure le tableau autant de fois qu'il y a de catégories.
    Ou alors il faut écrire le tableau $pieces dans l'ordre des catégories et parcourir uniquement ce tableau.

  12. #12
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par bndd24 Voir le message
    faut t'il la mettre obligatoirement ? :/
    Qui dit <input...> dit formulaire !
    Ici, de modification.
    Il faudra récupérer toutes les données pour chaque pièce, non ?

    Citation Envoyé par sabotage Voir le message
    Moi je ne trouve pas ça efficace : on parcoure le tableau autant de fois qu'il y a de catégories.
    En effet, j'avais noté cet inconvénient...
    S'il n'y a que peu de catégories et peu de pièces, ça ne devrait pas faire une grosse différence de performance...

    Une autre solution est d'ordonner les pièces par ordre croissant des $piece['categorie'] => voir array_multisort()
    On peut ainsi se passer du 1er foreach...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Regrouper plusieurs cellules de même valeur ? [tableau php/mysql]
    Par bond70 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 06/05/2010, 16h44
  2. créer un tableau longtable avec plusieurs parties par page
    Par neferou dans le forum Editeurs / Outils
    Réponses: 0
    Dernier message: 04/09/2009, 20h25
  3. [MySQL] Comparer plusieurs valeur d'un tableau php
    Par worldhugo dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 28/04/2009, 17h26
  4. fonction pour scinder un tableau en plusieurs parties
    Par HoB dans le forum VB 6 et antérieur
    Réponses: 14
    Dernier message: 08/04/2008, 16h46
  5. [PHP-JS] Remplir un tableau javascript selon un tableau php
    Par jerome38000 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 24/01/2005, 15h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo