2017-02-16 5 views
-1

У меня есть набор данных или массив, который выглядит какУпорядочивание иерархических данных по уровням

[    
    "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'], 
] 

Edit я выяснил источник данных, как это, казалось, вызвать некоторое замешательство

+0

htt p: //mikehillyer.com/articles/managing-hierarchical-data-in-mysql/ – Barmar

ответ

0

Я не SQL гуру, и вы не 't показать что-нибудь о базе данных, так что здесь есть рекурсивная функция 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)); 
+0

именно то, что мне нужно. Благодарю. Я бы поднял вас, но, вы знаете, низкая репутация –

0

Здесь вы идете:

SELECT LENGTH(value) - LENGTH(REPLACE(value, '-', '')) as level, GROUP_CONCAT(REPLACE(value, '-', '')) as groups 
FROM test 
GROUP BY level; 
Смежные вопросы