2017-12-18 170 views
3

我想价值观,如列表转换:如何将值列表设置为多维关联数组中的键?

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

到遍历数组键如列表:

$bar['a']['b']['c'] = 123; 

如何创建哪些键是基于一个关联数组一组值存储在另一个数组中?

+0

你尝试过什么吗?发布你的努力。 –

+0

你可以使用for循环来实现。 – Geshode

+1

123从哪里来?如果输入是'['a','b','c','d'];'会输出'$ bar ['a'] ['b'] ['c'] ['d “]'?而且它仍然是123?还是1234? – Andreas

回答

4

您可以参考。试试这个代码,live demo

<?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

代码:(Demo

$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', 
    ), 
), 
) 

如果第一方法感觉太劈肥胖型,下面的递归方法是一种稳定的方法:

验证码:(Demo

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 
相关问题