0

何かに取り組んでいるだけで、foreachを使用して配列をループするだけでは、この問題の簡単な解決策を見つけることはできません。誰かがこれに対する簡単な解決策を持っていますか

これを回したい

&array(4) {
["a"]=>int(0)
["b"]=>int(1)
["c"]=>int(2)
["d"]=>int(3)
}

これに

array(1) {
  ["a"]=>
  array(1) {
    [0]=>
    array(1) {
      ["b"]=>
      array(1) {
        [0]=>
        array(1) {
          ["c"]=>
          array(1) {
            [0]=>
            array(1) {
              ["d"]=> int(1) //this value does not matter
            }
          }
        }
      }
    }
  }
}

値はまったく関係ありません。必要なのは、所有しているarray_intersect_key_recursive関数に対して実行するためのキーだけです。

編集:テスト後に配列が変更されました。配列の配列としてネストする必要があります

4

2 に答える 2

1

これがどのように役立つかはわかりませんが、それでも楽しいエクササイズでした。

$newArray = array();
$last = &$newArray;
$array = array_reverse(array_keys($array));
while ($item = array_pop($array)) {
   if (!is_array($last)) {
      $last = array();
   }
   $last[$item] = array(array());
   $last = &$last[$item][0];
}

注:私はこの答えをint(1). 値は重要ではないと言ったので、今のところ変更するつもりはありませんが、値が重要な場合は、もう少し作業を行う必要があります (おそらく$item、キーとして元の配列から値を取得するようなものです) )。

于 2012-09-18T23:49:01.927 に答える
0

再帰を使用した別のアプローチ:

function toNestedArray(array $array, $index = 0) {
    $return = array();
    if ($index < count($array)) {
        $return[$array[$index]] = toNestedArray($array, ++$index);
    }
    return $return;
}

使用例:

$flatArray   = array('a' => 1, 'b' => 2, 'c' => 3, 'd' => 4); 
$nestedArray = toNestedArray(array_keys($flatArray));
print_r($nestedArray);

出力:

Array
(
    [a] => Array
        (
            [b] => Array
                (
                    [c] => Array
                        (
                            [d] => Array
                                (
                                )

                        )

                )

        )

)
于 2012-09-19T02:06:04.017 に答える