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

时间:2012-08-09 20:28:05

标签: php arrays ini

我搜索了类似的问题,但没有发现我想做的事情。

我有一个大的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()并查找文本“Records”,但这不是很优雅或可重复使用。

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

1 个答案:

答案 0 :(得分:0)

我怀疑有一种本地方式可以做到这一点,所以这就是我所做的:

$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
        )
)