PHP - Automatically creating a multi-dimensional array

本小妞迷上赌 提交于 2019-12-10 22:48:57

问题


So here's the input:

$in['a--b--c--d'] = 'value';

And the desired output:

$out['a']['b']['c']['d'] = 'value';

Any ideas? I've tried the following code without any luck...


$in['a--b--c--d'] = 'value';
// $str = "a']['b']['c']['d";
$str = implode("']['", explode('--', key($in)));
${"out['$str']"} = 'value';

回答1:


This seems like a prime candidate for recursion.

The basic approach goes something like:

  1. create an array of keys
  2. create an array for each key
  3. when there are no more keys, return the value (instead of an array)

The recursion below does precisely this, during each call a new array is created, the first key in the list is assigned as the key for a new value. During the next step, if there are keys left, the procedure repeats, but when no keys are left, we simply return the 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)]);

For your example the code above would evaluate as something equivalent to this (but will work for the general case of any number of -- separated items):

$out = array($keys[0] => array($keys[1] => array($keys[2] => array($keys[3] => 'value'))));

Or in more definitive terms it constructs the following:

$out = array('a' => array('b' => array('c' => array('d' => 'value'))));

Which allows you to access each sub-array through the indexes you wanted.




回答2:


$temp = &$out = array();
$keys = explode('--', 'a--b--c--d');
foreach ($keys as $key) {
    $temp[$key] = array();    
    $temp = &$temp[$key];
}
$temp = 'value';
echo $out['a']['b']['c']['d']; // this will print 'value'

In the code above I create an array for each key and use $temp to reference the last created array. When I run out of keys, I replace the last array with the actual value. Note that $temp is a REFERENCE to the last created, most nested array.



来源:https://stackoverflow.com/questions/3541933/php-automatically-creating-a-multi-dimensional-array

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!