代码之家  ›  专栏  ›  技术社区  ›  Jonathon Oates

在PHP中,如何将like数组(“one”、“two”、“three”)生成$somearray[“one”][两”][三”]?

  •  0
  • Jonathon Oates  · 技术社区  · 14 年前

    我想要一个数组,比如:

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

    把它变成一个数组,比如:

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

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

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

    我现在正在读这本书,会吗? array_map() 工作了吗?

    4 回复  |  直到 14 年前
        1
  •  1
  •   Eineki    14 年前

    你应该使用 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
  •  4
  •   Gumbo    14 年前

    您可以这样做:

    $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() 您将使用该结构构建一个数组。

        3
  •  0
  •   Barkermn01    14 年前

    我不知道你为什么要这个。

    但是你想要什么的基础是这样的

    $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的要求;

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

        4
  •  0
  •   Poonam Bhatt    14 年前
    $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
                        (
                        )
    
                )
    
        )
    

    )

    推荐文章