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 :

Simplification tableau multidimensionnel


Sujet :

Langage PHP

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 3
    Par défaut Simplification tableau multidimensionnel
    Bonjour,

    j'ai un petit problème que j'essaie de résoudre depuis un petit moment:

    Cela la concerne des <select> box sous la forme de fonctions:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    html_form_select('choixmat[]',$liste,$preselect=null,$attr=null, $reverted = false);
    où $liste est un tableau sous la forme array( "value" => "label" ) et représente la liste des options avec leurs valeurs.

    Le contenu de $liste est definit par un mysql_query qui va cherche la valeur et le label des options dans la basse de donné:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $sqlmat = "	SELECT
    			`cours_id`, 
    			`intitule`, 
    			`code`, 
    		FROM
    			 cl_cours";
     
    $result = mysql_query($sqlmat);
    $result est mis sous forme de tableau

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $choixlistg = array();
    while ($row = mysql_fetch_assoc($result))
    		{
    		$code = $row['code'];// qui sera la valeur
    		$intitule = $row['intitule'];// qui sera le label
    		$choixmat = array('code' => $code, 'intitule' => $intitule);
    		array_push($choixlistg, array($choixmat));
    		}
    Là je me retrouve donc dans un tableau comprenant plein de tableaux ($choixlistg comprenant $choixmat qui comprend $row).

    Mon but est de transfromer ce tableau complexe en un tableau correspondant à la forme du $liste, c'est à dire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $liste = array( "code" => "intitule" );
    Le plus simple des tableaux que j'ai réussi à faire à partir de $choixlistg est un tableau à 2 dimensions grâce au code suivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $listegenerale = array();
    foreach ($choixlistg as $matk)
    		{
    		array_push($listegenerale, array('intitule' => $matk[0]['intitule'], 'code' => $matk[0]['code']));
    		}
    mais maintenant je bloque et je cherche de bonnes âmes pour améliorer et corriger mon code.

  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
    Par défaut
    Tu fais fausse route, ton tableau $choixlistg correspond déjà à ce que tu veux.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $liste = array(
    0=>array("code" => "intitule" ),
    1=>array("code" => "intitule" ),
    2=>array("code" => "intitule" )
    )
    il n'y a rien de plus simple que ça, a part que ton code est inutilement long :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $choixlistg = array();
    while ($row = mysql_fetch_assoc($result))
    		{
                     $choixlistg[] = $row;
    		}
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 3
    Par défaut
    Merci pour la syntaxe, ça réduit de pas mal mon code, mais j'ai un autre problème: quand je fais un print_r, il m'affiche alors:

    Array ( [0] => Array ( [BIOCH] => Biochimie ) [1] => Array ( [BIOMOL] => Bio ) )

    or je voudrais que mon tableau ne comporte que:

    Array ( [BIOCH] => Biochimie,
    [BIOMOL] => Bio);

    et donc que soit supprimés les "array( [i] =>".

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 3
    Par défaut
    C'est bon, j'ai trouvé, pour cela j'ai fusionné les tableaux imbriqués comme suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    for($i = 0; $i < $nbcours; $i++) 
    	{
    	if(is_array($list[$i])) 
    		{
    		$liste = array_merge($liste, $list[$i]);
    		}
    	else 
    		{
    		$liste[] = $list[$i];
    		}
    	}
    Merci pour l'aide

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 08/12/2005, 14h41
  2. Réponses: 2
    Dernier message: 27/11/2005, 23h36
  3. Nombre de dimensions d'un tableau multidimensionnel
    Par Bruno75 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 08/07/2005, 10h03
  4. type de donnée tableau multidimensionnel
    Par opheliegomes dans le forum Débuter
    Réponses: 2
    Dernier message: 03/02/2005, 12h29
  5. [langage] tableau multidimensionnel
    Par totox17 dans le forum Langage
    Réponses: 3
    Dernier message: 03/12/2002, 15h58

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