从 读取类似数组的值.INI 文件到 PHP 数组中?里面的例子


Reading array-like values from .INI file into PHP array? Example inside

我搜索了类似的问题,但没有发现任何我想要的。

我有一个大的INI文件,每行都包含基本的键/值对。许多键基本上是存储在 中的"数组"。INI 格式,您将在下面的摘录中看到:

# Excerpt from INI file itself...
CountryFlagsPackage=CountryFlags
bAllowBinds=False
bShowTime=False
Records[0]=14.64
Records[1]=16.33
Records[2]=11.47
Records[3]=13.26
Records[4]=16.64
Records[5]=19.34

我正在使用 parse_ini_string() 将 INI 放入一个数组中,结果如下:

# Excerpt from print_r() after parse_ini_string()
[CountryFlagsPackage] => CountryFlags
[bAllowBinds] => False
[bShowTime] => False
[Records[0]] => 14.64
[Records[1]] => 16.33
[Records[2]] => 11.47
[Records[3]] => 13.26
[Records[4]] => 16.64
[Records[5]] => 19.34

我的问题是:有没有一种优雅的方法将所有这些"记录"条目分组到一个PHP数组中?目前 - 如上所示 - 它们只是单独的数组项。基本上,我正在寻找上面的数组变得多维。

我可以使用array_keys()并查找文本"记录",但这不是很优雅或可重用。

编辑:我想我也可以使用正则表达式来查找末尾带有方括号的任何内容。有什么更好的解决方案吗?

我怀疑是否有本机方法可以做到这一点,所以这是我所做的:

$file = parse_ini_string($ini);
foreach ($file as $key => $value) {
    if (preg_match("/('w+)'['d+]/", $key, $matches)) {
        // "Array" style key/value
        $arrays[$matches[1]][] = $value;
    } else {
        // Standard key/value pair
        $arrays[$key] = $value;
    }
}
print_r($arrays);

结果:

Array
(
    [CountryFlagsPackage] => CountryFlags
    [bAllowBinds] => False
    [bShowTime] => False
    [Records] => Array
        (
            [0] => 14.64
            [1] => 16.33
            [2] => 11.47
            [3] => 13.26
            [4] => 16.64
            [5] => 19.34
        )
)