J'ai trouvé une solution qui a fonctionné pour moi sur : Convertir un tableau PHP plat en tableau imbriqué basé sur les clés du tableau et comme j'avais un tableau basé sur un fichier .ini avec des clés différentes, j'ai fait une petite modification de ce script et le travail a fonctionné pour moi.
Mon tableau ressemblait à ceci:
[resources.db.adapter] => PDO_MYSQL
[resources.db.params.host] => localhost
[resources.db.params.dbname] => qwer
[resources.db.params.username] => asdf
...
À la demande, voici le code que j'ai décrit comme fonctionnant pour moi:
";
print_r($db_settings);
echo "
"; $resources = array(); foreach ($db_settings as $path => $value) { $ancestors = explode('.', $path); set_nested_value($resources, $ancestors, $value); } echo " "; print_r($resources); echo ""; /** * Donnez-lui un tableau et un tableau de parents, il descendra dans les tableaux imbriqués et définira la valeur. */ function set_nested_value(array &$arr, array $ancestors, $value) { $current = &$arr; foreach ($ancestors as $key) { // Pour gérer l'entrée d'origine, si un élément n'est pas un tableau, // le remplacer par un tableau avec la valeur comme premier élément. if (!is_array($current)) { $current = array( $current); } if (!array_key_exists($key, $current)) { $current[$key] = array(); } $current = &$current[$key]; } $current = $value; }
Voici la source du fichier .ini lu par le parse_ini_file():
Array
(
[resources.db.adapter] => PDO_MYSQL
[resources.db.params.host] => localhost
[resources.db.params.dbname] => dbname
[resources.db.params.username] => dbname_user
[resources.db.params.password] => qwerqwerqwerqwer
[resources.db.params.charset] => utf8
[externaldb.adapter] => PDO_MYSQL
[externaldb.params.host] => localhost
[externaldb.params.dbname] => dbname2
[externaldb.params.username] => dbname_user2
[externaldb.params.password] => qwerqwerwqerqerw
[externaldb.params.charset] => latin1
)
Voici le résultat du code ci-dessus:
Array
(
[resources] => Array
(
[db] => Array
(
[adapter] => PDO_MYSQL
[params] => Array
(
[host] => localhost
[dbname] => dbname
[username] => dbname_user
[password] => qwerqwerqwerqwer
[charset] => utf8
)
)
)
[externaldb] => Array
(
[adapter] => PDO_MYSQL
[params] => Array
(
[host] => localhost
[dbname] => dbname2
[username] => dbname_user2
[password] => qwerqwerwqerqerw
[charset] => latin1
)
)
)