在PHP中我如何将一个类似的数组(“一个”,“两个”,“三个”)变成$ somearray [“one”] [“two”] [“three”]?

时间:2010-11-19 13:39:53

标签: php arrays array-map

我想拿一个数组,说:

array("one", "two", "three");

并将其转换为数组数组,例如:

$someArray["one"]["two"]["three"];

数组数组($someArray)必须由某种循环创建,因为初始数组是由explode()创建的,所以我不知道有多深$someArray会的。

我希望这很清楚,谢谢你的所有时间!

我现在正在阅读它,array_map()会为此工作吗?

4 个答案:

答案 0 :(得分:4)

你可以这样做:

$path = array("one", "two", "three");
$ref = &$arr;
foreach ($path as $key) {
    if (!isset($ref[$key])) break;
    $ref = &$ref[$key];
}

最后$ref是对$arr['one']['two']['three']的引用(如果存在)。如果您将break替换为$ref[$key] = array(),则会构建一个具有该结构的数组。

答案 1 :(得分:1)

您应该使用array_reduce。 解决方案非常简单。

要做到这一点,请反转数组,然后再应用减少。

$a = array('a','b','c');
$x = array_reduce(array_reverse($a), function ($r, $c) {
        return array($c=>$r);
     },array());

编辑扩展和解释版本:

在php中,我们没有自动深入到数组的功能,但我们没有。 如果从底部开始,我们将能够将数组包含在前一个数组中 通过简单的分配。

$a = array('a','b','c');
$result=array(); // initially the accumulator is empty
$result = array_reduce(
    array_reverse($a), 
    function ($partialResult, $currentElement) {
        /* enclose the partially computed result into a key of a new array */
        $partialResult = array($currentElement=>$partialResult); 
        return $partialResult;
    }, 
    $result
);

顺便说一下,我更喜欢较短的形式。我认为这是一个功能性的习惯用语,不需要对中等经验的开发人员进行进一步的解释(具有一些功能背景)。第二个添加了很多噪音,它适合学习但是来源 分散到生产代码中(显然我指的是只有返回语句的函数)。

答案 2 :(得分:0)

我不确定你为什么会这样想。

但是你想要的基础就是这个

$numbers = array("one", "two", "three");

$array = array();
$pointer = &$array;

$last_val = NULL;

foreach($numbers as $key => $val){
     if(!empty($pointer[$last_val])){
         $pointer = &$pointer[$last_val];
         $pointer = new array($val);
         $last_val = $val;
     }else{
         $pointer = new array($val);
         $last_val = $val;
     }
}

这应该是你想要的$ array;

这是未经测试的,但我认为如果不只是告诉我它在做什么,我会看看它应该有效

答案 3 :(得分:0)

$arrNew = array();
$ref = &$arrNew;
$arrParts = array("one", "two", "three");

foreach($arrParts as $arrPart){

   $ref[$arrPart] = array(); 
   $ref = &$ref[$arrPart];
}

当你打印$ arrNew时,它会打印出来..

Array
(
    [one] => Array
        (
            [two] => Array
            (
                [three] => Array
                    (
                    )

            )

    )