02-08-2011, 05:31 PM
La récursivité semble de mise.
Voici une solution approchante du résultat; il y a un souci avec les clés purement numériques
et le résultat obtenu:
Voici une solution approchante du résultat; il y a un souci avec les clés purement numériques
<?php
$tab=array(
"npc.yoda.i_know_you" => "I know you...",
"npc.yoda.introduce" => "Hi! I\'m Yoda!",
"npc.yoda.you_finished_the_quest" => "You achieved the quest!",
"quest.n1.description" => "Bring me few endives and tomatoes, please.",
"quest.n1.title" => "Endives and tomatoes",
"quest.n2.description" => "Now, bring me few apples.",
"quest.n2.title" => "Think different"
);
$newTab=array();
foreach ($tab as $key => $val) {
$tmpTab=recursive(array(),$key,$val);
//chaque $tmpTab est correct unitairement mais la fonction suivante perturbe les clés numériques
$newTab=array_merge_recursive($newTab,$tmpTab);
}
echo "<pre>";print_r($newTab);
function recursive($tab,$key,$val) {
$multiKeys=explode('.',$key);
$firstKey=array_shift($multiKeys);
if (count($multiKeys)>0) {
// il reste des niveau de clés, donc on boucle
$newKey=implode('.',$multiKeys);
if (!isset($tab[$firstKey]) || (isset($tab[$firstKey]) && !is_array($tab[$firstKey]))) {
$tab[$firstKey]=array();
}
$ret=recursive($tab[$firstKey],$newKey,$val);
$tab[$firstKey]=array_merge($tab[$firstKey],$ret);
return $tab;
} else {
// fin de la récursivité, on fixe la valeur
$tab[$firstKey]=$val;
return $tab;
}
}
et le résultat obtenu:
Citation :ArrayUne transformation JSON en suivant ...
(
[npc] => Array
(
[yoda] => Array
(
[i_know_you] => I know you...
[introduce] => Hi! I\'m Yoda!
[you_finished_the_quest] => You achieved the quest!
)
)
[quest] => Array
(
[n1] => Array
(
[description] => Bring me few endives and tomatoes, please.
[title] => Endives and tomatoes
)
[n2] => Array
(
[description] => Now, bring me few apples.
[title] => Think different
)
)
)