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 :

[Tableaux] class array multidimensionnels [PHP 5.3]


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Février 2008
    Messages
    183
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Février 2008
    Messages : 183
    Points : 96
    Points
    96
    Par défaut [Tableaux] class array multidimensionnels
    Bonjour,

    Je ne maitrise pas très bien les tableaux multidimensionnels, et je débute avec les classes php5 et je voudrais pouvoir créer avec une classe un tableau multi.

    J'ai commencer par en faire un (array multi) sans classe qui fonctionne comme je veux (il est en bas de page du code ici mis en commentaire), mais des que j'essaie de faire pareille avec une classe, là çà vas plus, il y a que une partie qui fonctionne.

    Ci vous pouviez m'aider a faire fonctionner la classe, je vous remercie d'avance.
    Je vous montre la classe que j'ai fait :

    Code php : 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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    <?php
    class TableauxMulti {
     
    	private $listeanimaux;
    	private $listecompetance;
     
     
    	public function __construct(){
     
    		$this->listecompetance = array;
    		$this->listeanimaux = array;		
    	}
     
    	//ajoute des animaux	
    	public function ajouterAnimaux($listeanimau) {	
     
    		@array_push($this->listeanimaux,$listeanimau);		
    	}
     
    	// ajoute des competance a l animal	
    	public function ajouterCompetance($demande) {
     
    		@array_push($this->listecompetance,$demande);
    	}	
     
    	// affiche le tableau multidimention
    	public function afficherListe() {
     
    		foreach($this->multiliste as $idanimal => $valeur1)
    		{
    			echo "[$idanimal] <br />";
     
    			foreach ($valeur1 as $ccompetance => $valeur2)
    			{
    				echo $competance.'='.$valeur2.'  <br />';
    			}
    		}	
    	}
    }
     
    $castingrare = new TableauxMulti();
     
    $castingrare->ajouterAnimaux('animal_1'); // on ajoute un 1 animal
     	$castingrare->ajouterCompetance('race=Berger_allemand'); // on ajoute les competances pour cette animal
    	$castingrare->ajouterCompetance('age=21');
    	$castingrare->ajouterCompetance('sexe=f');
     
     
    $castingrare->ajouterAnimaux('animal_2'); // on ajoute un 2 eme animal
    	 $castingrare->ajouterCompetance('race=Phoenix'); // on ajoute les competances pour ce 2eme animal
    	$castingrare->ajouterCompetance('age=25');
    	$castingrare->ajouterCompetance('sexe=m');
     
     
    $castingrare->afficherListe(); // affiche le tableau multidimentionnelle
     
     
    // fonctionne en utilisant la methode sans classe
    /*
    $animal = array(
    	1 => array('race' => 'Phoenix', 'age' => '25', 'sexe' => 'M'),
    	2 => array('race' => 'Berger_allemand', 'age' => '15', 'sexe' => 'F')
    );
    
    foreach($animal as $cle1 => $valeur1)
    {
      echo "[animal_".$cle1."]<br />";
    
        foreach ($valeur1 as $cle2 => $valeur2)
        {
          echo $cle2 ."=" . $valeur2 . "<br />\n";
        }
    }
    */
    ?>

  2. #2
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 099
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 099
    Points : 8 208
    Points
    8 208
    Billets dans le blog
    17
    Par défaut
    Manque des () aux array's dans ton constructeur ;
    La propriété multiliste de TableauxMulti::afficherListe( ) n'existe pas ;
    Enlève les @ qui rendent le script indébugable.

    Sinon je ne vois pas comment est géré le lien entre animaux et compétEnces. C'est le multiliste qui est censé faire cela ?

    Perso je ferais un tableaux d'objets, ce qui donnerait qquechose comme :

    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
    $liste = new ListeAnimaux( ) ;
     
    $animal = new Animal( ) ;
    $animal->ajouterCompétence('race', 'Phoenix') ;
    $animal->ajouterCompétence('âge', 21) ;
    $animal->ajouterCompétence('sexe', 'm') ;
    $liste->ajouterAnimal($animal) ;
     
    $animal = new Animal( ) ;
    $animal->ajouterCompétence('race', 'Berger Allemand') ;
    $animal->ajouterCompétence('âge', 15) ;
    $animal->ajouterCompétence('sexe', 'f') ;
    $liste->ajouterAnimal($animal) ;
     
    $liste->afficherListe( )
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Février 2008
    Messages
    183
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Février 2008
    Messages : 183
    Points : 96
    Points
    96
    Par défaut
    Effectivement les ( ) manquai (petit oublie quand j'ai séparer la classe pour la présenter ici).
    Et j ai corriger le this->multiligne qui exister plus (oui j'avais tester un truc et j'ai oublier de la retirer).

    J'ai fait quelque modification a la classe, mais çà fonctionne toujours pas, le premier foreach de parcouru qui est ok mais pas avec les compétences.

    J'ai modifier le constructeur mais je suis pas sur de ce que j'ai fait.
    J'ai aussi modifier la méthode ajouterCompetance(), mais çà fonctionne pas.

    Pour l'exemple du résultat que je souhaite, le code est en commentaire en bas de la classe.

    J'ai bien peur de mal mis prendre dans la classe.
    Pour info : ensuite le contenue du tableau multi est enregistrer dans un fichier .ini d'ou le [animal_$idanimal] dans la boucle foreach

    Merci pour votre aide encore.

    Code php : 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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    <?php
    class TableauxMulti {
     
    	private $listeanimaux;
    	private $listecompetance;
     
     
    	public function __construct(){		
     
    		$this->listeanimaux = 	array(
    								$this->listecompetance => array()
    								);		
    	}
     
    	//ajoute des animaux	
    	public function ajouterAnimaux($animau) {	
     
    		array_push($this->listeanimaux,$animau);		
    	}
     
    	// ajoute des competance a l animal	
    	public function ajouterCompetance($competance,$value) {
     
    		array_push($this->listecompetance,"$competance => $value");
    	}	
     
    	// affiche le tableau multidimention
    	public function afficherListe() {	
     
    		foreach($this->listeanimaux as $idanimal => $valeur1)
    		{
    			echo "[animal_$idanimal] <br />";
     
    			foreach ($valeur1 as $competance => $valeur2)
    			{
    				echo $competance.'='.$valeur2.'  <br />';
    			}
    		}	
    	}
    }
     
    $castingrare = new TableauxMulti();
     
    $castingrare->ajouterAnimaux('animal_1'); // on ajoute un 1 animal
     	$castingrare->ajouterCompetance('race','Berger_allemand'); // on ajoute les competances pour cette animal
    	$castingrare->ajouterCompetance('age',21);
    	$castingrare->ajouterCompetance('sexe','F');
     
    $castingrare->ajouterAnimaux('animal_2'); // on ajoute un 2 eme animal
    	 $castingrare->ajouterCompetance('race','Phoenix'); // on ajoute les competances pour ce 2eme animal
    	$castingrare->ajouterCompetance('age',25);
    	$castingrare->ajouterCompetance('sexe','M');	
     
    $castingrare->afficherListe(); // affiche le tableau multidimentionnelle
     
     
    // fonctionne en utilisant la méthode sans classe
     
    /*
    $animal = array(
    	1 => array('race' => 'Phoenix', 'age' => '25', 'sexe' => 'M'),
    	2 => array('race' => 'Berger_allemand', 'age' => '15', 'sexe' => 'F')
    );
    
    foreach($animal as $cle1 => $valeur1)
    {
      echo "[animal_".$cle1."]<br />";
    
        foreach ($valeur1 as $cle2 => $valeur2)
        {
          echo $cle2 ."=" . $valeur2 . "<br />\n";
        }
    }
    
    */
    ?>

  4. #4
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 099
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 099
    Points : 8 208
    Points
    8 208
    Billets dans le blog
    17
    Par défaut
    Outre les erreurs de syntaxe ça ne peut pas fonctionner du fait de la conception même du script.
    Tu stockes dans un tableau les animaux, dans un autre les compétences, il n'y aucun lien entre ces deux tableaux.
    Fais comme je t'ai dit avec un objet ListeAnimaux et un objet Animal. Si tu veux je te donne le script
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Février 2008
    Messages
    183
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Février 2008
    Messages : 183
    Points : 96
    Points
    96
    Par défaut
    Bas écoute oui je veux bien le script stp.

    parce que j arrive pas a faire le lien entre les 2 tableau.

    Merci

  6. #6
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 099
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 099
    Points : 8 208
    Points
    8 208
    Billets dans le blog
    17
    Par défaut
    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    <?php
        class ListeAnimaux
        {
            public $animaux ;
     
            public function __construct( )
            {
                $this->animaux = array( ) ;
            }
     
            public function ajouterAnimal(Animal $animal)
            {
                $this->animaux[ ] = $animal ;
            }
     
            public function afficherListe( )
            {
                echo '<pre>' ;
                print_r($this->animaux) ;
                echo '</pre>' ;
            }
        }
     
        class Animal 
        {
            // Eventuellement représenter les compétences avec des 
            // propriétés d'objet plutôt qu'un tableau de compétences
            public $compétences ;
     
            public function __construct( )
            {
                $this->compétences = array( ) ;
            }
     
            public function ajouterCompétence($nom, $valeur)
            {
                $this->compétences[$nom] = $valeur ;
            }
        }
     
        $liste = new ListeAnimaux( ) ;
     
        $animal = new Animal( ) ;
        $animal->ajouterCompétence('race', 'Phoenix') ;
        $animal->ajouterCompétence('âge', 21) ;
        $animal->ajouterCompétence('sexe', 'm') ;
        $liste->ajouterAnimal($animal) ;
     
        $animal = new Animal( ) ;
        $animal->ajouterCompétence('race', 'Berger Allemand') ;
        $animal->ajouterCompétence('âge', 15) ;
        $animal->ajouterCompétence('sexe', 'f') ;
        $liste->ajouterAnimal($animal) ;
     
        $liste->afficherListe( ) ;
    ?>
    Donne :

    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
    Array
    (
        [0] => Animal Object
            (
                [compétences] => Array
                    (
                        [race] => Phoenix
                        [âge] => 21
                        [sexe] => m
                    )
     
            )
     
        [1] => Animal Object
            (
                [compétences] => Array
                    (
                        [race] => Berger Allemand
                        [âge] => 15
                        [sexe] => f
                    )
     
            )
     
    )
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Février 2008
    Messages
    183
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Février 2008
    Messages : 183
    Points : 96
    Points
    96
    Par défaut
    Et comment on fait pour afficher les valeur dans un foreach

    exactement comme ceci :

    [animal_0]
    race=Phoenix
    âge=21
    sexe=m
    [animal_1]
    race=Berger_Allemand
    âge=28
    sexe=F

    j ai essayer de faire ca en plus dans :

    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
    public function afficherListe( )
            {
                //echo '<pre>' ;
    				//print_r($this->animaux) ;
                //echo '</pre>' ;
     
     
    			foreach($this->animaux as $bete => $valeur1)
    			{
    				echo "[animal_$bete] ";
    				foreach ($valeur1 as $cle2 => $valeur2)
    				{
    					echo $cle2."=".$valeur2." ";
    				}
    			}
            }
    mais cela m affiche :

    [animal_0]
    compétences=Array
    [animal_1]
    compétences=Array

  8. #8
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 099
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 099
    Points : 8 208
    Points
    8 208
    Billets dans le blog
    17
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    foreach($this->animaux as $id => $animal) {
        echo "[animal_$id] ";
        foreach ($animal->compétences as $compétence => $valeur) {
            echo $compétence."=".$valeur." ";
        }
    }
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Février 2008
    Messages
    183
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Février 2008
    Messages : 183
    Points : 96
    Points
    96
    Par défaut RESOLU
    super génial, je te remercie beaucoup Seb, çà fonctionne impeccable.

    je vais pouvoir avancer pour les étape suivante, je bloquer beaucoup sur ca.

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

Discussions similaires

  1. Classe Array multidimensionnelle
    Par dvince38 dans le forum Langage
    Réponses: 2
    Dernier message: 01/04/2010, 14h42
  2. [Tableaux] Tri d'un array multidimensionnel
    Par amans dans le forum Langage
    Réponses: 3
    Dernier message: 22/04/2008, 16h11
  3. [Tableaux] Récursivité array multidimensionnel
    Par yanice dans le forum Langage
    Réponses: 10
    Dernier message: 30/01/2008, 20h52
  4. [Tableaux] Affichage Array
    Par dafalri dans le forum Langage
    Réponses: 6
    Dernier message: 06/12/2005, 11h55
  5. création de tableaux avec Array() et élément 'fantome'
    Par Talieth dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 22/11/2005, 09h49

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