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.