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

INI を配列に入れるために parse_ini_string() を使用しています。これにより、次の結果が得られます。

# 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

私の質問は、これらすべての「レコード」エントリを 1 つの PHP 配列にグループ化するエレガントな方法はありますか? 現在、上で見たように、それらは単なる個々の配列項目です。基本的に、上記の配列が多次元になることを探しています。

array_keys() を使用して "Records" というテキストを探すこともできますが、それはあまり洗練されておらず、再利用可能でもありません。

編集:正規表現を使用して、最後に角括弧が付いているものも検索できると思います。より良い解決策はありますか?

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 に答える