8768 sujets

Développement web côté serveur, CMS

Bonjour à toutes et à tous,

Je reviens à la charge avec mon problème de tableau multi-dimensionnel qui va bientôt me rend complètement chèvre.

Je dispose d'un array qui contient l'ensemble des informations sur lequel je dois effectuer mes traitements ; il est de cette forme:
Array
(
    [periodes] => Array
        (
            [saison1] => Array
                (
                    [titre] => mon_titre_A
                    [details] => Array
                        (
                            [Etq11] => 1001
                            [Etq12] => 1002
                            [Etq13] => 1003
                        )
                )
            [Saison2] => Array
                (
                    [titre] => mon_titre_B
                    [details] => Array
                        (
                            [Etq21] => 2001
                            [Etq22] => 2002
                            [Etq23] => 2003
                        )
                )
        )
    )

De cette table je tente (en vain) de récupérer les informations sous la forme suivante:
étiquettes => info

Suivant mon exemple je cherche à obtenir un array à une dimension qui contiendrait:
Array
    (
        [periodes_SEPARATEUR_saison1_SEPARATEUR_titre] => mon_titre_A
        [periodes_SEPARATEUR_saison1_SEPARATEUR_details_SEPARATEUR_Etq11] => 1001
        [periodes_SEPARATEUR_saison1_SEPARATEUR_details_SEPARATEUR_Etq12] => 1002
        [periodes_SEPARATEUR_saison1_SEPARATEUR_details_SEPARATEUR_Etq13] => 1003
 
       [periodes_SEPARATEUR_saison2_SEPARATEUR_titre] => mon_titre_B

/* et ainsi de suite */
    )


Vous voyez l'idée ?

J'arrive à parcourir l'intégralité de ma table mais pas moyen de déterminer les id de ma table de résultat.
Ceci n'est qu'à moitié vrai, en fait j'y arrive parfaitement sur un niveau mais les sous niveaux me posent problème.

Pour l'instant je suis sur la piste d'une fonction récursive imbriquée avec passage de paramètres mais j'ai l'impression de me noyer dans cet océan récursif.

Je vous place ci-dessous l'avancée de ma recherche et espère que cela inspirera une réponse qui représentera la lumière au bout du tunnel.
/* attention, ce code est une ébauche non fonctionnelle */

function boucle($array,$previous='',$histo=''){static $output=''; // $output remplacera les echo à terme

foreach($array as $key=>$value){


if(is_array($value)){
echo '<pre>Début Array:<BR>Historique clés: '.$histo.' Previous: '.$previous.' key: '.$key;// debug

if(!empty($histo)&&$histo!==null){
$tmp=array_filter(explode(TRACE_SEP,preg_replace('/'.TRACE_SEP.'$/','',$histo)));

if($previous!==end($tmp)){$previous=$key;
}else{$histo=$histo.TRACE_SEP.$key;}

}else{
$histo=$key.TRACE_SEP;
}

if(!empty($previous)&&$key!==$previous){$previous=$key;}
boucle($value,$previous,$histo);
//echo '<BR>FIN ARRAY</pre>';
}else{

echo '<pre>Début string'.$previous; // debug
echo '<br>histo: '.$histo.$previous.'<BR>key: '.$key.' value: '.$value; // debug
echo '<BR>fin STRING</pre>'; // debug

}//fin de is_string
}//fin foreach array
}//fdf

boucle($datas_brutes); // $datas_brutes contient la table multidimensionnelle de départ


Avec mes remerciements.


EDIT (01/03/16) : N'ayant trouvé aucune solution à ce jours, le sujet est abandonné. J'ai convertis mes tables pour qu'elles ne présentent qu'un sous niveau maximum.
Modifié par Greg_Lumiere (01 Mar 2016 - 13:07)