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 回答