Précédent   Forum des professionnels en informatique > PHP > Langage
Langage Forum sur le langage PHP, la POO, les conventions, la sécurité, etc. Avant de poster : FAQ Langage, toutes les FAQ PHP, cours langage et sources PHP
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 26/07/2011, 16h20   #1
Membre habitué
 
Étudiant
Inscription : avril 2005
Messages : 258
Détails du profil
Informations personnelles :
Âge : 29

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : avril 2005
Messages : 258
Points : 127
Points : 127
Par défaut Arbres en php

Bonjour,
j'ai un tableau sous cette forme:

uid parent_uid
5 0
4 0
10 4
11 4
12 10

et je souhaiterai obtenir un tableau associatif comme suit:
("5" => array(), "4" => array("10" => array("12" => array), "11" => array()))

j'ai le code suivant:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
//init
$tabs = array();
$parent_tab = array();
foreach <line> {
     $parent_tab[<uid>] = <parent_uid>;
     $tabs[<uid>] = array();
}
 
 
        $sorted = array();
        foreach($parent_tab as $uid => $parent_id) {
        	if ($parent_id == 0) {
        		$h_sorted[$uid] = &$tabs[$uid];
        	} else {
        		$tabs[$parent_id][$uid] = &$tabs[$uid];
        	}
        }
Mais je n'arrive pas a avoir les sous tableaux!
merci de votre aide
suckthewindow est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/07/2011, 18h13   #2
Membre Expert
 
Avatar de gene69
 
Inscription : janvier 2006
Messages : 951
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : janvier 2006
Messages : 951
Points : 1 063
Points : 1 063
Code :
1
2
3
foreach <line> {
     $parent_tab[<uid>] = <parent_uid>;
     $tabs[<uid>] = array();
c'est du php ça?
__________________
PHP fait nativement la validation d'adresse électronique Vous êtes perdu en PHP? rassurez-vous ici (en)
Utilisez le bouton résolu!
gene69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/07/2011, 19h14   #3
Expert Confirmé
 
Avatar de rawsrc
 
Homme Martin
Dev indep
Inscription : mars 2004
Messages : 1 461
Détails du profil
Informations personnelles :
Nom : Homme Martin
Âge : 35
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Dev indep

Informations forums :
Inscription : mars 2004
Messages : 1 461
Points : 2 548
Points : 2 548
Envoyer un message via Skype™ à rawsrc
Salut suckthewindow,

Bon vu que t'es étudiant, je pense que tu devrais te pencher un peu plus sur l'alogorithmique, enfin moi je dis ça, je dis rien

Dans tous les cas, à partir d'un problème qui tient en 2 lignes, la soluce est un peu plus compliquée (généralement c'est toujours comme ça).

Bon voilà un code qui répond à ton besoin (en espérant ne pas avoir fait de boulettes).
Code :
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 
 
$data = array(5 => 0, 4 => 0, 10 => 4, 11 => 4, 12 => 10);
$tabs = array();
 
function addChild(array &$p, &$id, &$child) {
   foreach($p as $k => &$v) {
      if ($k === $id) {
         $v[$child] = array();
         return;
      }
      elseif (empty($v)) {
         continue;
      } 
      else {
         addChild($v, $id, $child);
      }
   }
}
 
foreach($data as $uid => $parentId) {
   if ($parentId === 0) {
      $tabs[$uid] = array();
   }
   else {
      addChild($tabs, $parentId, $uid);
   }   
}
 
var_dump($tabs);
 
?>
__________________
# Dans la Création, tout est permis mais tout n'est pas utile...
rawsrc est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h46.


 
 
 
 
Partenaires

Hébergement Web