所以这是输入:
$in['a--b--c--d'] = 'value';
以及所需的输出:
$out['a']['b']['c']['d'] = 'value';
有任何想法吗?我尝试过以下代码,但没有任何运气......
$in['a--b--c--d'] = 'value';
// $str = "a']['b']['c']['d";
$str = implode("']['", explode('--', key($in)));
${"out['$str']"} = 'value';
这似乎是递归的主要候选者。
基本方法如下:
- 创建一个键数组
- 为每个键创建一个数组
- 当没有更多的键时,返回值(而不是数组)
下面的递归正是这样做的,在每次调用期间都会创建一个新数组,列表中的第一个键被分配为新值的键。在下一步中,如果有剩余的键,则重复该过程,但如果没有剩余的键,我们只需返回该值。
$keys = explode('--', key($in));
function arr_to_keys($keys, $val){
if(count($keys) == 0){
return $val;
}
return array($keys[0] => arr_to_keys(array_slice($keys,1), $val));
}
$out = arr_to_keys($keys, $in[key($in)]);
对于您的示例,上面的代码将评估为与此等效的内容(但适用于任意数量的一般情况)--
分开的项目):
$out = array($keys[0] => array($keys[1] => array($keys[2] => array($keys[3] => 'value'))));
或者用更明确的术语来说,它构造了以下内容:
$out = array('a' => array('b' => array('c' => array('d' => 'value'))));
这允许您通过所需的索引访问每个子数组。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)