0

我搜索了类似的问题,但没有发现完全符合我的要求。

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

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

4

1 回答 1

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
        )
)
于 2012-08-09T22:13:15.770 回答