Fondamentalement, j'aimerais que j'aimerais un moyen simple, simple et unique d'analyser un fichier INI avec des fonctionnalités "avancées", telles que héritage de section et nichement de propriété, comme zend_config_ini .
Par exemple: p> dans P> array(
'foo'=>array(
'a'=>'1',
'b'=>array(
'a'=>'2',
'b'=>'3',
'c'=>'4'
),
'c'=>'5'
),
'bar'=>array(
'a'=>'1',
'b'=>array(
'a'=>'2',
'b'=>'17',
'c'=>'4'
),
'c'=>'42'
)
)
4 Réponses :
Première pour répondre à une chose, la nidification de la propriété est disponible à partir de parse_ini_file (), définissez le deuxième param param w sur true I.e parse_ini_file ("test.ini", true); Cela vous donnera une matrice multidimensionnelle, c'est-à-dire Voici une petite fonction qui analysera la matrice renvoyée par parse_ini_file () et la transformer en catégories. P> Array
(
[foo] => Array
(
[a] => 1
[b.a] => 2
[b.b] => 3
[b.c] => 4
[c] => 5
)
[bar] => Array
(
[a] => 1
[b.a] => 2
[b.b] => 17
[b.c] => 4
[c] => 42
)
)
Eh bien, ce que vous appelez la nidification de la propriété, c'est juste des sections ( [foo] code> ou [foo: bar] code>). Votre fonction gère la section héritage de la section (très bien, aussi, j'ajouterais), mais pas la propriété de propriété comme je veux dire: BA = 5 code> devrait générer [B] => tableau ([A] = > 5) code>.
Je ne sais pas si je devrais éditer ma vieille réponse ou ajouter un nouveau.
Essayez cette version de celui-ci, devrait être ce que vous recherchez. P>
Array
(
[foo] => Array
(
[a] => 1
[b] => Array
(
[a] => 2
[b] => 3
[c] => 4
)
[c] => 5
)
[bar] => Array
(
[a] => 1
[b] => Array
(
[a] => 2
[b] => 17
[c] => 4
[x] => Array
(
[c] => 33
)
)
[c] => 42
)
[hot] => Array
(
[a] => 1
[b] => Array
(
[a] => 83
[b] => 17
[c] => 4
[x] => Array
(
[c] => 33
)
[d] => 23
)
[c] => 42
)
)
Hey, merci! C'est exactement ce que je cherche. En aucun cas, j'aurais pu trouver cela si concis. Pour une référence future, étant donné que c'est un amendement à votre autre réponse, vous devez le modifier.
Je sais que c'est un ancien poste mais toujours utile, bien qu'il y ait une erreur avec la fonction récursive_parse. Dans la 2e foreach, après la première boucle $ b = tableau ($ v => $ b); code> $ b ne sera pas défini. et si $ B n'est pas défini, la fusion récursive échouera sur $ b [$ x [0]]
J'ai écrit quelque chose comme ça et pour l'instant, cela fonctionne bien pour moi:
Une autre option - c'est la paire, la construction et l'analyse.
function build_ini_string_nested( $data, $path = null ){
$content = array();
foreach( $data AS $key => $val ){
if( is_array($val) ){
$content[] = build_ini_string_nested( $val, ($path ? $path. '.' : '') . $key );
}
else if( $path ) {
$content[] = $path . '[' . ($path && is_numeric($key) ? '' : $key) . '] = ' . $val;
}
else {
$content[] = $key . ' = ' . $val;
}
}
return implode("\n", $content);
}
function parse_ini_string_nested( $data, $path = null ){
if( is_string($data) )
$data = parse_ini_string($data);
if( $path )
foreach( $data AS $key => $val ){
if( strpos( $key, $path.'.' ) !== false ){
$find_node = explode('.', $path);
$this_path = reset(explode('.', substr($key, strlen($path.'.'))));
$node =& $data;
do {
$node =& $node[ array_shift($find_node) ];
} while( count($find_node) );
if( is_array($node[ $this_path ]) ){
$node[ $this_path ][] = $val;
}
else {
$node[ $this_path ] = $val;
}
}
}
else {
$drop_keys = array();
foreach( $data AS $key => $val ){
if( count(explode('.', $key)) > 1 ){
$path = reset(explode('.', $key));
$data[ $path ] = array();
$data = parse_ini_string_nested( $data, $path );
$drop_keys[] = $key;
}
}
foreach( $drop_keys AS $key ){
unset($data[ $key ]);
}
}
return $data;
}
Pouvez-vous expliquer pourquoi zend_config_ * est "super gonflé"? Oh, et vous n'avez pas besoin de tout le arbre ... Just Zend_config, Zend_Config_Exception et Zend_Exception
En regardant via le fichier source, Zend_Config_ini dépend de Zend_Config_Exception et de Zend_Config. Zend_Config_Exception dépend de Zend_Exception. Toutes les fonctionnalités sont étalées sur plusieurs classes et fichiers. Accordé, je tiens zf dans très i> hautement respecté pour sa conception de l'OOP, mais dans ce cas, c'est vraiment trop.
Tout ce que je veux que ce soit à faire est d'analyser une ini à un tableau associatif. Je ne veux pas ou si vous avez besoin de la fonctionnalité supplémentaire que Zend_Config a.
Votre choix si vous voulez le faire de la manière difficile :) Bien que vous puissiez faire des mods mineurs à Zend_Config_ini pour supprimer les dépendances.
J'avais peur de ça ... merci pour le conseil, Jani.
Je n'appellerais pas zend_config ballonné. Bloté implique une surfonctionnalité, ce qui implique à son tour la fonctionnalité. Nous parlons de Zend "Créer votre propre implémentation de l'ACL!" Cadre ici.