PHP - 动态地向数组添加维度

时间:2015-09-09 13:08:41

标签: php arrays

我有一个:

$value = "val";

我也有一个数组:

$keys = ['key1', 'key2', 'key3'...]

该数组中的键是动态生成的,可以包含2到10个或更多条目。

我的目标是:

$array['key1']['key2']['key3']... = $value;

我该怎么做?

由于

2 个答案:

答案 0 :(得分:3)

我认为没有内置函数,但您可以使用简单的foreach和引用来实现。

$newArray = [];
$keys = ['key1', 'key2', 'key3'];
$reference =& $newArray;

foreach ($keys as $key) {
    $reference[$key] = [];

    $reference =& $reference[$key];
}

unset($reference);

var_dump($newArray);

答案 1 :(得分:3)

最简单,最简单的方法(即不使用引用)将使用递归函数:

function addArrayLevels(array $keys, array $target)
{
      if ($keys) {
          $key = array_shift($keys);
          $target[$key] = addArrayLevels($keys, []);
      }
      return $target;
}

//usage
$keys = range(1, 10);
$subArrays = addARrayLevels($keys, []);

它有效as you can see here

的工作原理非常简单:

  • if ($keys) {:如果还有一个要添加的密钥
  • $key = array_shift($keys);从数组中移出第一个元素
  • $target[$key] = addArrayLevels($keys, []);:将索引添加到$target,然后使用$keys再次调用相同的函数(删除第一个值后)。这些递归调用将一直持续到$keys为空,并且函数只返回一个空数组

缺点:

  • 递归可能一开始就很难搞定,特别是在复杂的函数中,在你没写的代码中,但记录得很好而且你应该没问题

专业人士:

  • 它更灵活(您可以使用$target作为一种默认/最终赋值变量,只需花费很少的精力(如果我找到时间,将添加以下示例)
  • 没有reference mess and risks来处理

使用上述函数调整以在“最低”级别指定值的示例:

function addArrayLevels(array $keys, $value)
{
      $return = [];
      $key = array_shift($keys);
      if ($keys) {
          $return[$key] = addArrayLevels($keys, $value);
      } else {
          $return[$key] = $value;
      }
      return $return;
}

$keys = range(1, 10);
$subArrays = addARrayLevels($keys, 'innerValue');
var_dump($subArrays);

Demo