PHP-向数组动态添加维度

PHP-向数组动态添加维度,php,arrays,Php,Arrays,我有一个: $value = "val"; 我还有一个数组: $keys = ['key1', 'key2', 'key3'...] 该数组中的键是动态生成的,可以从2个条目到10个或更多条目 我的目标是: $array['key1']['key2']['key3']... = $value; 我该怎么做 谢谢我不认为有内置的功能,但是你可以通过简单的foreach和引用来实现 $newArray = []; $keys = ['key1', 'key2', 'key3']; $refer

我有一个:

$value = "val";
我还有一个数组:

$keys = ['key1', 'key2', 'key3'...]
该数组中的键是动态生成的,可以从2个条目到10个或更多条目

我的目标是:

$array['key1']['key2']['key3']... = $value;
我该怎么做


谢谢

我不认为有内置的功能,但是你可以通过简单的
foreach
和引用来实现

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

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

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

unset($reference);

var_dump($newArray);

最简单、最不混乱的方法(即不使用引用)是使用递归函数:

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, []);
它起作用了

它的工作原理非常简单:

  • 如果($keys){
    :如果还有一个要添加的键
  • $key=array\u shift($keys);
    从数组中移动第一个元素
  • $target[$key]=addArrayLevels($keys,[]);
    :将索引添加到
    $target
    ,并使用
    $keys
    (删除第一个值后)再次调用同一函数。这些递归调用将继续进行,直到
    $keys
    为空,并且该函数仅返回一个空数组
缺点:

  • 递归在一开始的时候可能会很棘手,特别是在复杂的函数中,在你没有编写的代码中,但是要很好地记录它,你应该会很好
专业人士:

  • 它更灵活(您可以使用
    $target
    作为一种默认/最终赋值变量,不费吹灰之力(如果我找到时间,将在下面添加示例)
  • 不需要处理
使用上述函数的自适应在“最低”级别分配值的示例:


@JeremyBelolo:请阅读我的“专业人士”列表中的链接答案以获得解释,但请相信我的话:尽可能避免引用,在这里你真的可以避免引用
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);