【问题标题】:Covert flat array to Nested Array in PHP在 PHP 中将平面数组转换为嵌套数组
【发布时间】:2013-07-26 05:27:23
【问题描述】:

给定以下输入:

array('one/two/3',
      'one/four/0/5',
      'one/four/1/6',
      'one/four/2/7',
      'eight/nine/ten/11')

我怎样才能把它变成这个:

array(
   'one': array( 
        'two': 3,
        'four': array(5,6,7)
    )
   'eight': array(
        'nine': (
                'ten':11
            )
    }
 )

【问题讨论】:

    标签: php flatten multidimensional-array


    【解决方案1】:

    如果我们能看到您的尝试,那就太好了。

    $my_array = array('one/two/3',
    'one/four/0/5',
    'one/four/1/6',
    'one/four/2/7',
    'eight/nine/ten/11');
    
    $result= array();   
    foreach ($my_array as $val) {
    $ref = & $result;
    foreach (explode("/", $val) as $val) {
        if (!isset($ref[$val])) {
            $ref[$val] = array();
        }
        $ref = & $ref[$val];
    }
    $ref = $val;
    }
    
    var_dump($result);
    

    【讨论】:

      【解决方案2】:
      $input = array ('one/two/3',
          'one/four/0/5',
          'one/four/1/6',
          'one/four/2/7',
          'eight/nine/ten/11');
      
      $result = array ();
      foreach ($input as $string) {
          $data      = array_reverse(explode('/', $string));
          $tmp_array = array ();
          foreach ($data as $val) {
              if (empty($tmp_array)) {
                  $tmp_array = $val;
              } else {
                  $tmp             = $tmp_array;
                  $tmp_array       = array ();
                  $tmp_array[$val] = $tmp;
              }
          }
          $result = array_merge_recursive($result, $tmp_array);
      }
      echo "<pre>";
      print_r($result);
      echo "</pre>";
      

      输出:

      Array
      (
          [one] => Array
              (
                  [two] => 3
                  [four] => Array
                      (
                          [0] => 5
                          [1] => 6
                          [2] => 7
                      )
      
              )
      
          [eight] => Array
              (
                  [nine] => Array
                      (
                          [ten] => 11
                      )
      
              )
      
      )
      

      【讨论】:

        猜你喜欢
        • 2017-10-11
        • 1970-01-01
        • 2011-10-30
        • 1970-01-01
        • 1970-01-01
        • 2021-08-11
        • 1970-01-01
        • 2020-01-15
        • 2015-07-19
        相关资源
        最近更新 更多