PHP - Problème de clé dans un tableau

bulldawg11
Invité n'ayant pas de compte PHPfrance

02 mai 2008, 13:24

Bonjour,
Je veut insérer quelque chose à un endroit précis dans un tableau (dynamique) et je bloque.
Voici un bout de code pour téster.
error_reporting(E_ALL);
$tab=array("a","b","c");
$chemin=implode("']['",$tab);

$mon_tableau{$chemin}="azerty";
//$mon_tableau['a']['b']['c']="azerty";

print_r($mon_tableau);
Ce que je veut :

Code : Tout sélectionner

Array ( [a] => Array ( [b] => Array ( [c] => azerty ) ) ) Ce que j'ai : Array ( [a']['b']['c] => azerty )
Merci d'avance

ViPHP
ViPHP | 3300 Messages

02 mai 2008, 13:46

implode crée une chaine de caractères ton résultat est tout à fait normal

essayes ça pour voir (non testé)
$tab=array("a","b","c");

$newvar = 'azerty';

for($i=0;$i<count($tab);$i++) {

$newvar = array($tab[$i]=>$newvar);

}

print_r($newvar);
Fait du php depuis que ca existe ou presque :)

ViPHP
ViPHP | 2291 Messages

02 mai 2008, 13:59

Salut

Essaye comme ceci :wink:
<?php
$tab ['a']['b']['c']='azerty';

echo'<pre>';
print_r($tab);
echo'</pre>';
?>
affichera ceci :
Array
(
    [a] => Array
        (
            [b] => Array
                (
                    [c] => azerty
                )

        )

)

:wink:

Invité
Invité n'ayant pas de compte PHPfrance

02 mai 2008, 14:45

Dunbar,
Ce n'a rien à voir avec un problème d'affichage, mais de structure de mon tableau, merci quand meme

Nagol,
Merci de ton aide,
En faisant la boucle à l'envers de ce que tu as fait, effectivement cela marche.
Cependant, dans mon contexte, qui est une fonction récursive qui me permet de stocker une arborescence dans un tableau, il m'est difficile de l'adapter car ton tableau est écrasé à chaque fois. Hors mon tableau éxiste est contient déja des éléments.
Je bloque !

ViPHP
ViPHP | 2291 Messages

02 mai 2008, 15:03

Dunbar,
Ce n'a rien à voir avec un problème d'affichage, mais de structure de mon tableau, merci quand meme
:oops:

ViPHP
ViPHP | 3300 Messages

02 mai 2008, 15:35

Dunbar,
Ce n'a rien à voir avec un problème d'affichage, mais de structure de mon tableau, merci quand meme

Nagol,
Merci de ton aide,
En faisant la boucle à l'envers de ce que tu as fait, effectivement cela marche.
Cependant, dans mon contexte, qui est une fonction récursive qui me permet de stocker une arborescence dans un tableau, il m'est difficile de l'adapter car ton tableau est écrasé à chaque fois. Hors mon tableau éxiste est contient déja des éléments.
Je bloque !
Aye j'aurais du y penser, ca devait faire $newvar[c][a] :) si tu as déja des valeurs dans le tableau et que tu changes la structure dans ce cas tu pourrais passer par une variable temporaire et affecter la valeur finale dans la nouvelle structure à la fin seulement.
Fait du php depuis que ca existe ou presque :)

ViPHP
ViPHP | 2291 Messages

02 mai 2008, 15:48


Aye j'aurais du y penser, ca devait faire $newvar[c][a] :)


Oui bon sorry, j'ai répondu en même temps que toi j'avais pas vu ta réponse, de plus j'ais mal interprété sa question, je ne me serais pas permis de me croire plus malin.

ViPHP
ViPHP | 3300 Messages

02 mai 2008, 16:03


Aye j'aurais du y penser, ca devait faire $newvar[c][a] :)


Oui bon sorry, j'ai répondu en même temps que toi j'avais pas vu ta réponse, de plus j'ais mal interprété sa question, je ne me serais pas permis de me croire plus malin.


Mon quote commence par la réponse que te fait le poster mais je ne te visais aucunement dans mon texte hein :) ca arrive de pas comprendre les questions, et c'est toujours une bonne chose de vouloi y répondre donc je ne me serais pas permis de dire quoi que ce soit de négatif sur ce que tu as dit dans ce topic. C'est juste un quiproquo :)
Fait du php depuis que ca existe ou presque :)

ViPHP
ViPHP | 2291 Messages

02 mai 2008, 16:44


Aye j'aurais du y penser, ca devait faire $newvar[c][a] :)


Oui bon sorry, j'ai répondu en même temps que toi j'avais pas vu ta réponse, de plus j'ais mal interprété sa question, je ne me serais pas permis de me croire plus malin.


Mon quote commence par la réponse que te fait le poster mais je ne te visais aucunement dans mon texte hein :) ca arrive de pas comprendre les questions, et c'est toujours une bonne chose de vouloi y répondre donc je ne me serais pas permis de dire quoi que ce soit de négatif sur ce que tu as dit dans ce topic. C'est juste un quiproquo :)


Ok parfait merci :wink: a+

bulldawg11
Invité n'ayant pas de compte PHPfrance

07 mai 2008, 12:21

si tu as déja des valeurs dans le tableau et que tu changes la structure dans ce cas tu pourrais passer par une variable temporaire et affecter la valeur finale dans la nouvelle structure à la fin seulement.
Je bien, mais dans ce cas je reviens à ma question...Comment attribuer cette variable à un endroit précis de mon tableau...
Merci de ton aide

ViPHP
ViPHP | 3300 Messages

07 mai 2008, 16:21

si tu as déja des valeurs dans le tableau et que tu changes la structure dans ce cas tu pourrais passer par une variable temporaire et affecter la valeur finale dans la nouvelle structure à la fin seulement.
Je bien, mais dans ce cas je reviens à ma question...Comment attribuer cette variable à un endroit précis de mon tableau...
Merci de ton aide
c'est dur à dire comme ça, tu peux filer un exemple complet avec la structure réelle et des données à peu pret réelles?
Fait du php depuis que ca existe ou presque :)

ViPHP
ViPHP | 4674 Messages

08 mai 2008, 00:13

Hey :),

Deux mots-clés qui devraient te mettre sur la voie : récursivité et passage par référence. Tu vois de quoi je parle ?

Sinon, explique plutôt ce que tu veux faire ; peut-être que ta méthodologie n'est pas la bonne.
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).

bulldawg11
Invité n'ayant pas de compte PHPfrance

09 mai 2008, 00:46

Oui c'est surement pas très clair, désolé ;-)

Donc je veut faire une fonction récursive qui me retourne une arborescece dans un tableau (une autre solution?).

C'est dans le cadre d'un projet où je gère des 'pages' qui sont liées à une 'rubrique', qui est lié à une rubrique 'parent', etc.

Ma logique au niveau de la récursivité est bonne, puisqu'en faisant un simple affichage je ne rencontre aucun problème.

Voila ma fonction simplifié sans la gestion du tableau (A faire entre les commentaires)
Il y a une seule rubrique au niveau 0 qui contient une seule page et des rubriques


public function getArborescence($rubrique="Rubrique principale",$niveau=0){
		if($niveau==0){
			//
			$la_rubrique=$rubrique;
			//
		}
		$niveau++;
		$rubriques=self::getRubriques($rubrique);
		foreach($rubriques as $kRubrique => $vRubrique){
			//
			$la_rubrique=$vRubrique['rubrique'];
			//
			self::getArborescence($vRubrique['rubrique'],$niveau);
			$pages=self::getPagesRubrique($vRubrique['rubrique']);
			foreach($pages as $kPage => $vPage){
				//
				$la_page=$vPage['page'];
				//
			}
		}
		if($niveau==1){
			//
			$la_page="Page principale";
			//
		}	
	}
Voila clairement, comment faire pour que ma fonction me retourne mon arborescence

Merci beaucoup de votre intéret en tout cas.

ViPHP
ViPHP | 4674 Messages

09 mai 2008, 09:00

Il faut récupérer le résultat de ton appel récursif et l'assigner pour construire le tableau. Tu aurais alors un retour de tout ton tableau en fin de fonction.

Concernant les niveaux, j'aurais déclaré des variables en statique moi, plutôt que dynamique. Ça t'évite de les passer en argument et donc les erreurs de constructions (mais il faudra placer $niveau-- aussi).
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).