Précédent   Forum des professionnels en informatique > PHP > Langage > Débuter
Débuter Forum d'entraide pour débuter en PHP. Avant de poster -> Cours PHP, FAQ PHP, Outils PHP, etc.
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 18/07/2011, 09h56   #1
Invité régulier
 
Inscription : janvier 2010
Messages : 11
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 11
Points : 9
Points : 9
Par défaut Tableaux Multidimensionnels en PHP

Salut à tous,

Encore junior en PHP, je bloque sur une fonction que j'ai faite et qui doit me générer un tableau Multidimensionnel pour par la suite me permettre de créer un Organigramme hiérarchique d'entreprise.

- j'arrive bien à construire mon tableau sur 3 dimensions hierarchique mais je bloque pour parcourir un 4 étage en dessous.

2eme ptit problème :

- lorsque j'essaie de mettre mon id superviseur en cle et les subalterns en valeurs, il s'arrete à la premiere valeur et ne boucle pas sur le reste.

voici ma fonction qui me genere mon array :
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
 
public function getHierarchicArray()
	{
		$subalterns = $this->mainUser->getSubalterns();
		foreach($subalterns as $idChief )
		{
			$aSubaltern = self::$_users->findFirst(array('idUser' => $idChief));
			foreach($aSubaltern->getSubalterns() as $key => $idSupervisor)
			{	
				$aSupervisor = self::$_users->findFirst(array('idUser' => $idSupervisor));
				if($aSupervisor->isSupervisor())
				{
					$subaltern = $aSupervisor->getSubalterns();
					foreach($subaltern as $key=>$idSub)
					{
						$this->hierarchicArray[$idChief][$idSupervisor] = $subaltern;						
					}
				}
				else
				{
					$this->hierarchicArray[$idChief][$idSupervisor] = count($aSupervisor->getSubalterns());		
				}
			}
		}
		return $this->hierarchicArray;
	}

et voici le retour de ma fonction :
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
33
34
35
36
37
38
39
 
Array
(
    [10] => Array
        (
            [100] => 0
            [108] => Array
                (
                    [0] => 339
                    [1] => 209
                )
 
            [227] => 0
            [1] => Array
                (
                    [0] => 375
                    [1] => 236
                )
 
            [365] => Array
                (
                    [0] => 42
                )
 
            [956] => 0
            [128] => 0
        )
 
    [665] => Array
        (
            [104] => 0
            [206] => 0
            [307] => 0
            [331] => 0
            [348] => 0
        )
 
 
)
je pense que je dois passer à côté de quelque chose mais là jsuis un peu coincé...
Merci de votre aide.
shark1308 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/07/2011, 11h17   #2
Membre du Club
 
Inscription : janvier 2010
Messages : 59
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 59
Points : 44
Points : 44
Salut, j'ai pas lu le code, au delà de 2 boucle imbriquées mon cerveau ne suis plus .
Je te suggère de tenté quelque chose récursif c'est peut être plus simple...
MtgCmg est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/07/2011, 12h05   #3
Invité régulier
 
Inscription : janvier 2010
Messages : 11
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 11
Points : 9
Points : 9
Je te remercie, je suis en train d'ajouter une méthode récursive à ma fonction principale, pas trop l'habitude des manipulations de tableaux avec autant de dimensions, je me perd un peu, on dira que ça forge l'expérience...
shark1308 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/07/2011, 17h03   #4
Invité régulier
 
Inscription : janvier 2010
Messages : 11
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 11
Points : 9
Points : 9
ça va beaucoup mieux avec la récursivité.

au final ça donne a peu près ça :

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
 
public function getHierarchicTree()
	{
		$subalterns = $this->mainUser->getSubalterns();
		foreach($subalterns as $aUser)
		{
			$this->testArray[$aUser] = $this->generateHierarchicArray(self::$_users->findFirst(array('idUser'=>$aUser)));
		}
		return $this->testArray;
	}
	//tested OK
	private function generateHierarchicArray($aUser, $tmpArray = Array())
	{
 
		foreach($aUser->getSubalterns() as $idSubaltern)
		{
			$aSupervisor = self::$_users->findFirst(array('idUser' => $idSubaltern));
			if($aSupervisor->isSupervisor())
			{
				$tmpArray[$idSubaltern] = $this->generateHierarchicArray($aSupervisor);
			}
			else
			{
				$tmpArray[$idSubaltern] = count($aSupervisor->getSubalterns());	
			}
		}
		return $tmpArray;
	}
shark1308 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h04.


 
 
 
 
Partenaires

Hébergement Web