0

重複の可能性:
PHP キーを保持しながら多次元配列をウォークスルーする

私はこのような深い配列を持っています:

array {
  ["key1"] => "A"
  ["key2"] => "B"
  ["key3"] => array {
                ["subkey1"] => "C"
                ["subkey2"] => array {
                                  ["subsubkey1"] => "D"
                               }
              }

}

この配列がどれだけ深くなるかはわかりません。これを次のような配列に変換したいと思います。

array {
   array {
  ["key1"] => "A"
  ["key2"] => "B"
  ["key3.subkey1"] => "C"
  ["key3.subkey2.subsubkey1"] = > "D"
}

どうすればいいですか?再帰が必要だと思いますか?

4

2 に答える 2

2

書かれているように、これは再帰またはスタックを使用して実行できます。これは、スタックの使用例です。

$separator = '.';
$flat = array();

while ($array)
{
    list($key, $value) = array(key($array), array_shift($array));
    if (is_array($value))
    {
        foreach($value as $subKey => $node)
            $array[$key.$separator.$subKey] = $node;
        continue;
    }
    $flat[$key] = $value;
}

結果は次のよう$flatになります。$arrayデータは次のようになります。

Array
(
    [key1] => A
    [key2] => B
    [key3.subkey1] => C
    [key3.subkey2.subsubkey1] => D
)
于 2012-08-16T08:30:04.590 に答える
2

単純な

$array = array(
    'a' => array(
        'b' => array(
            'c' => 'val'
        ),
        'd' => 'val2'
    ),
    'e' => 'val3'
);

var_dump(collapse($array));

function collapse($array)
{
    $result = array();
    foreach ($array as $key => $val) {
        if (is_array($val)) {
            foreach (collapse($val) as $nested_key => $nested_val) {
                $result[$key . '.' . $nested_key] = $nested_val;
            }
        } else {
            $result[$key] = $val;
        }
    }

    return $result;
}

http://ideone.com/ieSZ6

PS:通常、私は完全な解決策を提供するのは好きではありませんが、この場合、解決策は初心者には難しすぎるかもしれません

于 2012-08-16T08:23:21.423 に答える