0

我想拿一个数组,说:

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

并将其制成数组数组,例如:

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

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

我希望这很清楚,谢谢大家的时间!

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

4

4 回答 4

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()你将构建一个具有该结构的数组。

于 2010-11-19T13:42:45.597 回答
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
);

顺便说一句,我更喜欢较短的形式。我认为这是一个函数式惯用语,不需要向中级经验丰富的开发人员(具有一点函数背景)进一步解释。第二个增加了很多噪音,它适合学习,但会分散生产代码的注意力(显然我指的是只有一个返回语句的函数)。

于 2010-11-19T13:52:28.037 回答
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;

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

于 2010-11-19T13:51:43.400 回答
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
                    (
                    )

            )

    )

)

于 2010-11-19T13:58:36.133 回答