如何在多维关联数组中将一系列值设置为键?

3

I would like to convert a list of values such as:

$foo = ['a', 'b', 'c']; 

将其转换为遍历数组键的列表,例如:
$bar['a']['b']['c'] = 123;

我如何创建一个关联数组,其键基于存储在另一个数组中的一组值?

你尝试过什么吗?也把你的努力贴出来吧。 - Code Lღver
你可以使用for循环来实现。 - Geshode
1
123是从哪里来的?如果输入是['a', 'b', 'c', 'd']; 那么输出会变成 $bar['a']['b']['c']['d']吗?它仍然是123吗?还是1234? - Andreas
1
类似于这个 字符串转关联数组 - LF00
同样的问题:PHP将单维数组转换为嵌套数组 - mickmackusa
显示剩余2条评论
3个回答

4
您可以参考以下代码。请尝试此代码:演示版
<?php
$foo = ['a', 'b', 'c']; 
$array = [];
$current = &$array;
foreach($foo as $key) {
  @$current = &$current[$key];
}
$current = 123;
print_r($array);

1
我会这样做:

$foo = ['a', 'b', 'c']; 
$val = '123';
foreach (array_reverse($foo) as $k => $v) {
    $bar = [$v => $k ? $bar : $val];
}

我们正在反向迭代数组,并首先分配最内部的值,然后从内向外构建数组。

0

这里还有另一种选择:创建一个临时可解析的字符串(通过提取第一个值,然后将其余值作为方括号包装的字符串附加),调用parse_str(),并将输出变量设置为$bar

代码:(演示

$foo = ['a', 'b', 'c'];
$val=123;

parse_str(array_shift($foo).'['.implode('][',$foo)."]=$val",$bar);
// built string: `a[b][c]=123`
var_export($bar);

输出:

array (
  'a' => 
  array (
    'b' => 
    array (
      'c' => '123',
    ),
  ),
)

如果第一种方法感觉太过于hack-ish,下面的递归方法是一个稳定的方法:
代码:(演示)
function nest_assoc($keys,$value){
    return [array_shift($keys) => (empty($keys) ? $value : nest_assoc($keys,$value))];
    //      ^^^^^^^^^^^^^^^^^^--------------------------------------------------------extract leading key value, modify $keys
    //  check if any keys left-----^^^^^^^^^^^^
    //  no more keys, use the value---------------^^^^^^
    //  recurse to write the subarray contents-------------^^^^^^^^^^^^^^^^^^^^^^^^^
}

$foo=['a','b','c'];
$val=123;

var_export(nest_assoc($foo,$val));
// same output

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接