【问题标题】:PHP create 3D Array from Array with 3 ValuesPHP 从具有 3 个值的数组创建 3D 数组
【发布时间】:2009-11-12 14:40:44
【问题描述】:

再说一遍:

以下数组;

$myArray = array('FOO', 'BAR', 'HELLO');

我需要:

$myArray['FOO']['BAR']['HELLO'] = 0;

有什么想法吗?

【问题讨论】:

    标签: php arrays transform


    【解决方案1】:
     function onion($a) {
      return $a ? array(array_shift($a) => onion($a)) : 0;
    }
    
    $myArray = array('FOO', 'BAR', 'HELLO');
    print_r(onion($myArray));
    

    //编辑:其实doc's solution更好,他/她的代码,改进了一点

      $new = 0;
      foreach (array_reverse($myArray) as $v)
           $new = array($v => $new);
    

    【讨论】:

    • 非常好,这比我写的实现要干净得多。 ArneRie 真的认为这是正确的。
    【解决方案2】:
    $newarr[array_pop($myarr)] = 0;
    foreach (array_reverse($myarr) as $v)
        $newarr[$v] = $newarr;
    

    【讨论】:

    • 每个递归算法都有非递归等价物;)
    【解决方案3】:

    你可以试试$newArray[$myArray[0]][$myArray[1]][$myArray[2]] = 0;

    【讨论】:

      【解决方案4】:
      $newArray = array($oldArray[0] => array($oldArray[1] => array($oldArray[2] => 0)));
      

      【讨论】:

      • 当然,但我需要“自动”创建它,我不知道我的源中有多少键或值.. (-:
      【解决方案5】:

      你可以用递归来做到这一点:

      function arrToKeys(&$arr,$initialCount){
         if($initialCount == 0 ){
            return $arr;
         }
         else{
            $newKey = $arr[0];
            unset($arr[0]);
            $arr[$newKey] = $arr;
            $initialCount--;
            return arrToKeys($arr,$initialCount);  
         }
      }
      
      //then call it like this
      $newArr = arrToKeys($myArray,count($myArray));
      

      【讨论】:

      • 该函数引发分段错误。而且你缺少一个右括号
      猜你喜欢
      • 2021-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-19
      • 1970-01-01
      • 2017-11-19
      • 2021-08-15
      • 1970-01-01
      相关资源
      最近更新 更多