Php 按级别排列分层数据

Php 按级别排列分层数据,php,mysql,arrays,recursion,Php,Mysql,Arrays,Recursion,我有一个数据集或数组,看起来像 [ "foo", "bar", [ "gum", "ball", [ "fat", "rubber", ], "zoo", "topia", ], "ant",

我有一个数据集或数组,看起来像

[               
  "foo",        
  "bar",        
  [             
    "gum",      
    "ball",     
    [           
      "fat",    
      "rubber", 
    ],          
    "zoo",      
    "topia",    
  ],            
  "ant",        
  "elephant",   
  "grass",      
  [             
    "hopper",   
  ],            
]               
我需要一个函数,根据它们的级别或深度对它们进行分组。比如:

[
   "level 1" => ['foo','bar','ant','elephant','grass'],
   "level 2" => ['gum','ball','zoo','topia','hopper'],
   "level 3" => ['fat','rubber'],
]
编辑我澄清了源数据,因为它似乎引起了一些混乱

给你:

SELECT LENGTH(value) - LENGTH(REPLACE(value, '-', '')) as level, GROUP_CONCAT(REPLACE(value, '-', '')) as groups
FROM test
GROUP BY level;

我不是SQL专家,您也不会展示任何关于数据库的信息,因此这里有一个递归PHP函数:

function get_levels($array, $level=1) {

    $result = array();

    foreach($array as $value) {
        if(is_array($value)) {
            $result += get_levels($value, $level+1);
        } else {
            $result[$level][] = $value;
        }
    }
    return $result;
}

print_r(get_levels($array));

正是我需要的。谢谢我会投票给你,但是,你知道,名声很低