Page 1 sur 1

PHP - Problème de clé dans un tableau

Posté : 02 mai 2008, 13:24
par bulldawg11
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

Posté : 02 mai 2008, 13:46
par Nagol
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);

Re: PHP - Problème de clé dans un tableau

Posté : 02 mai 2008, 13:59
par dunbar
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:

Posté : 02 mai 2008, 14:45
par Invité
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 !

Posté : 02 mai 2008, 15:03
par dunbar
Dunbar,
Ce n'a rien à voir avec un problème d'affichage, mais de structure de mon tableau, merci quand meme
:oops:

Posté : 02 mai 2008, 15:35
par Nagol
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.

Posté : 02 mai 2008, 15:48
par dunbar

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.

Posté : 02 mai 2008, 16:03
par Nagol

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 :)

Posté : 02 mai 2008, 16:44
par dunbar

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+

Posté : 07 mai 2008, 12:21
par bulldawg11
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

Posté : 07 mai 2008, 16:21
par Nagol
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?

Posté : 08 mai 2008, 00:13
par Hywan
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.

Posté : 09 mai 2008, 00:46
par bulldawg11
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.

Posté : 09 mai 2008, 09:00
par Hywan
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).