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 :

Array Linéaire vers Array MultiDimensionnel (pour menu hiérarchique)


Sujet :

Langage PHP

  1. #1
    Membre éclairé Avatar de Pymento
    Homme Profil pro
    Ingé. Info.
    Inscrit en
    Janvier 2008
    Messages
    366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingé. Info.

    Informations forums :
    Inscription : Janvier 2008
    Messages : 366
    Par défaut Array Linéaire vers Array MultiDimensionnel (pour menu hiérarchique)
    Bonjour à tous d'abord, c'est la première fois que je poste sur un forum, j'espère que vous pourrez m'aider !
    Je vais tacher d'être le plus clair possible, mon problème:
    J'ai un tableau linéaire qui ressemble à ça
    Code x : 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
    [1] 
           => [root]= 1
           => [catégorie]= null
           => [sous-cat]= null
           => [Lien]= "" 
    
    [2] 
           => [root]= 2
           => [catégorie]= null
           => [sous-cat]= null
           => [Lien]= ""  
    
    [3] 
           => [root]= 2
           => [catégorie]= 1
           => [sous-cat]= null
           => [Lien]= ""  
    
    [4] 
           => [root]= 2
           => [catégorie]= 1
           => [sous-cat]= 1
           => [Lien]= ""  
    
    [etc...]
    c'est à peu prés ça, donc c'est pour gérer un menu par la suite avec une classe iterator, qui pourra comporter plusieurs catégories et sous-catégories.
    Je désire structurer mon tableau de façon hiérarchique comme un arbre
    donc un Array Multi-Dimensionnel, c'est à dire obtenir ce genre de résultat
    Code x : 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
    [1] 
           => [root]= 1
           => [catégorie]= null
           => [sous-cat]= null
           => [Lien]= "" 
    
    [2] 
           => [root]= 2
           => [catégorie]= null
           => [sous-cat]= null
           => [Lien]= ""  
                         =>
    
    
                        [1] 
                               => [root]= 2
                               => [catégorie]= 1
                               => [sous-cat]= null
                               => [Lien]= ""  
                                          =>
    
                                       [1] 
                                             => [root]= 2
                                             => [catégorie]= 1
                                             => [sous-cat]= 1
                                             => [Lien]= ""  
    
                        [2] 
                                 => [root]= 2
                                 => [catégorie]= 2
                                 => [sous-cat]= null
                                 => [Lien]= "" 
    
    
    [3] 
           => [root]= 3
           => [catégorie]= null
           => [sous-cat]= null
           => [Lien]= "" 
                         =>
                        [1] 
                                => [root]= 3
                                => [catégorie]= 1
                                => [sous-cat]= null
                                => [Lien]= ""

    J'ai essayé pas mal de trucs, notamment des iterators, des fonctions récursives des foreach enfin bref ça fait quelques jours que je bloque là dessus et je commence à perdre patience

    J' attend vos solutions avec le plus grand intérêt et vous remercie d'avance d'avoir pris le temps de lire mon post.

  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
    Bonjour,

    Que répresentent root, catégorie est sous-cat dans ton arborescence ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre éclairé Avatar de Pymento
    Homme Profil pro
    Ingé. Info.
    Inscrit en
    Janvier 2008
    Messages
    366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingé. Info.

    Informations forums :
    Inscription : Janvier 2008
    Messages : 366
    Par défaut
    Root représente le numéro de la catégorie mère, catégorie est l'enfant de "root" quand à sous_cat , c'est l'enfant de catégorie. Le tableau est sur trois niveaux d'imbrication.

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4
    Par défaut
    Salut
    En fait si je comprends bien tu veux en gros te retrouver avec un array comme ça :
    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
    Array(
        [0] => cat_1
        [1] => cat_2
        [2] => Array(
                 [0] => cat_2_1
                 [1] => Array
                         (
                          [0] => cat_2_1_1
                          )
                 )
        [3] => cat_3
        [4] => Array(
                 [0] => cat_3_1
         )
    )
    C'est bien ça ?

  5. #5
    Membre éclairé Avatar de Pymento
    Homme Profil pro
    Ingé. Info.
    Inscrit en
    Janvier 2008
    Messages
    366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingé. Info.

    Informations forums :
    Inscription : Janvier 2008
    Messages : 366
    Par défaut
    Oui voila.

  6. #6
    Membre éclairé Avatar de Pymento
    Homme Profil pro
    Ingé. Info.
    Inscrit en
    Janvier 2008
    Messages
    366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingé. Info.

    Informations forums :
    Inscription : Janvier 2008
    Messages : 366
    Par défaut
    J'ai vraiment besoin d'aide !
    je vais tacher d'étoffer mon post, voila une ancienne manière que j'avais pour remplir mon Array, mais l'imbrication est mauvaise.
    Je n'arrive pas a le traiter correctement par la suite

    Ici $csv_configCategoriesBoutique est un objet retourner par une fonction qui permet de lire un fichier csv(de type exel) il a trois colomnes
    ps:




    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
    //on saute la premiere ligne d'en tête pour ne récupérer que les valeurs
    $csv_configCategoriesBoutique->getRow()
    //Contruction d'un nouvel array dont les profondeurs sont définies par les "_"
    while ($row = $csv_configCategoriesBoutique->getRow()){
    	//affectation variable LINK
        $link=$this->linkModel($row,$boutique_url,$boutique_prefixe_tri,$boutique_suffixe_tri);
    	//le numero d'index des categories parent
    	$index=$row[0];
    	//le libelle de la categorie
    	$libelle=$row[1];
    	//le numero ebay de la categorie boutique
    	$numCat=$row[2];
    	//compte la quantité de underscores	dans la chaine de caracteres $index
    	$level = substr_count($index, '_');
    	//séparation des niveau de cat et on les range dans un tableau temp
    	$temp = explode('_', $index);
     
    	$level = substr_count($index, '_');
     
     
    	if($level===0){//c'est catégorie parent
    			$menu_array[$index]=array('cat_id'=>$index,"isChild"=>0, "sous_cat_id"=>false,"lib"=>$row[1],"cat_ebay"=>$row[2],"linkModel"=>$link,"child"=>false);
                  }elseif($level===1){//si il y a un _ c'est une sous catégorie
    		list($cat, $sous_cat) = explode('_', $index);
    		$menu_array[$cat]["child"][]=array('cat_id'=>$cat,"isChild"=>1 ,"sous_cat_id"=>$sous_cat,"lib"=>$row[1],"cat_ebay"=>$row[2],"linkModel"=>$link,"subChild"=>false);
    }elseif($level===3){
    list($cat,$sous_cat,$sous_sous_cat) = explode('_',$index); $menu_array[$cat][$sous_cat]['subChild'][]=array('cat_id'=>$cat,"isChild"=>1 ,"sous_cat_id"=>$sous_cat,"sous_sous_cat_id"=>$sous_sous_cat,"lib"=>$row[1],"cat_ebay"=>$row[2],"linkModel"=>$link);
    					}
    				}

    Désolé pour l'imbrication du code, j'ai pas pu mieux faire!

  7. #7
    Membre Expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Par défaut
    Bonjour,

    Voilà ce que je te propose :
    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
    while ($row = $csv_configCategoriesBoutique->getRow())
    {
        //affectation variable LINK
        $link = $this->linkModel($row,$boutique_url,$boutique_prefixe_tri,$boutique_suffixe_tri);
     
        //le numero d'index des categories parent
        $index=$row[0];
     
        //le libelle de la categorie
        $libelle=$row[1];
     
        //le numero ebay de la categorie boutique
        $numCat=$row[2];
     
        //séparation des niveau de cat et on les range dans un tableau tree
        $tree = explode('_', $index);
     
        // initialisation d'un tableau temporaire qui 'pointe' sur le tableau à remplir
        $arrayTemp = &$menu_array;
        foreach($tree as $i => $cat)
        {
            if ($i == count($tree) - 1)
            { // On est au bon niveau de $menu_array => on ajoute une valeur au tableau
                $arrayTemp[$cat] = array('lib'=>$libelle, 'cat_ebay'=>$numCat, 'linkModel'=>$link, 'child'=>array());
            }
            else
            { // "descente" d'une catégorie dans $menu_array
                $arrayTemp = &$arrayTemp[$cat]['child'];
            }
        }
    }
    Le résultat n'est peut-être pas exactement ce que tu veux, mais tu dois pouvoir l'adapter à tes besoins (en tous cas, on y retrouve tous les éléments que tu avais, et sous forme d'un tableau "arborescent"). Pour que ce code fonctionne, il faut que les données soient triées au départ (les catégories avant leurs sous-catégories).

  8. #8
    Membre éclairé Avatar de Pymento
    Homme Profil pro
    Ingé. Info.
    Inscrit en
    Janvier 2008
    Messages
    366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingé. Info.

    Informations forums :
    Inscription : Janvier 2008
    Messages : 366
    Par défaut
    Merci pour ton aide mais j'ai finalement réussi à faire mon tableau je laisse le code:


    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
    public function makeOutputArray2(){	
     
    		$i=0;
    		unset($this->tempArray[0]);
    		foreach($this->tempArray as $key=>$row ){			
     
    			if ($row['cat']== null && $row['sous_cat']== null){
    				$cat1=$row['index'];
    				settype($cat1, "integer");
    				$this->outputArray[]=$row['link'];
    				foreach($this->tempArray as $k=>$r){
    					$sousArray="";
    					if ($r['root']==$row['root']&& $r['index']!=$row['index']&& $r['sous_cat']==null){
    						$cat=$r['cat'];
    						settype($cat, "integer");
    						$this->outputArray[][]=$r['link'];
     
     
    						$key2=$k;
     
     
    						$cle=key($this->tempArray);
     
     
     
     
    						foreach ($this->tempArray as $kk=>$rr){
     
     
    							$long=$rr['index'];							
    							settype($cat1, "integer");
    							$io=strlen($long);
    							$sous=$rr['sous_cat'];
    							settype($sous, "integer");
    							if ($io==5 && $rr['root']==$row['index'] && $rr['cat']==$r['cat']){
    								$sousArray[]=$rr['link'];
    								$count=count($this->outputArray);
    								echo $count;
    								echo' : count.';
     
     
    						}
     
    						}if ($sousArray!="")
    						$this->outputArray[$count-1][]=$sousArray;
    					}
    				}
    				$i++;
     
    return $this->outputArray;
     
    	}				}

    Bon c'est un peu fouillis mais bon je le laisse quand même pour si ça peut servir!
    J'ai un problème d'itération mais je vais ouvrir un autre post.

    Bonne continuation à tout le monde

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

Discussions similaires

  1. Array dans un Array.. Dans un Array
    Par blinkman04 dans le forum Langage
    Réponses: 3
    Dernier message: 27/01/2014, 14h36
  2. array dans une proc report pour surligner certaines cellules
    Par debdev dans le forum ODS et reporting
    Réponses: 3
    Dernier message: 26/06/2009, 15h31
  3. Convertir un ArrayList vers Array
    Par Soulama dans le forum Collection et Stream
    Réponses: 7
    Dernier message: 24/06/2009, 15h36
  4. conversion d'un Array List vers un type de donnée
    Par msahli3 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 19/03/2009, 17h44
  5. Array javascript vers php
    Par devadip dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 28/01/2008, 09h00

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