INI文件到PHP中的多维数组

Ale*_*tau 6 php arrays ini parsing

我有下一个INI文件:

a.b.c = 1
a.b.d.e = 2
Run Code Online (Sandbox Code Playgroud)

我正在使用parse_ini_file解析此文件.它返回:

array(
    'a.b.c' => 1,
    'a.b.d.e' => 2
)
Run Code Online (Sandbox Code Playgroud)

但我想创建一个多维数组.我的外出应该是:

array(
    'a' => array(
        'b' => array(
            'c' => 1,
            'd' => array(
                'e' => 2
            )
        )
    )
)
Run Code Online (Sandbox Code Playgroud)

先感谢您.

XzK*_*Kto 5

这就是我的看法:

<?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);
        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'));
Run Code Online (Sandbox Code Playgroud)