ini文件在PHP多维数组
问题描述
如果是普通的php.ini文件,比如:
// info.ini
name=wubin;
age=30;
$arr = parse_ini_file('info.ini');
如果想要一个二维数组,我的下一个INI文件:
a.b.c = 1
a.b.d.e = 2
我使用parse_ini_file解析该文件。并返回:
array(
'a.b.c' => 1,
'a.b.d.e' => 2
)
不过,我想创建一个多维数组。我outout应该是:
array(
'a' => array(
'b' => array(
'c' => 1,
'd' => array(
'e' => 2
)
)
)
)
推荐答案
<?php
class ParseIniMulti {
public static function parse($filename) {
$ini_arr = parse_ini_file($filename);
if ($ini_arr === FALSE) {
return FALSE;
}
// self::fix_ini_multi(&$ini_arr);
self::fix_ini_multi($ini_arr);
return $ini_arr;
}
private static function fix_ini_multi(&$ini_arr) {
foreach ($ini_arr AS $key => &$value) {
if (is_array($value)) {
self::fix_ini_multi($value);
}
if (strpos($key, '.') !== FALSE) {
$key_arr = explode('.', $key);
$last_key = array_pop($key_arr);
$cur_elem = &$ini_arr;
foreach ($key_arr AS $key_step) {
if (!isset($cur_elem[$key_step])) {
$cur_elem[$key_step] = array();
}
$cur_elem = &$cur_elem[$key_step];
}
$cur_elem[$last_key] = $value;
unset($ini_arr[$key]);
}
}
}
}
var_dump(ParseIniMulti::parse('test.ini'));