Hola,
Seguramente es aburrido leer lo anterior, pero pensé que querias desarrollar el código personalemnte, así que solo te pongo una parte ... para que entres en los detalles ...
Código PHP:
$data = array(
"0_0_0",
"0_1_0",
"1_0_0",
"2",
"2_0_5",
"2_0_6",
"5",
"5_2",
"6",
"6_1_0",
"6_1_1",
"6_2_0"
);
$done = array();
sort($data, SORT_STRING);
foreach ($data as &$d)
$d = explode('_', $d);
$data = walk($data, 1);
renum($data, 'P');
print_r($done);
La función walk es relativamente sencilla ... te muestro la primera parte ... si deseas que ponga el código completo no hay problema .. aunque posiblemente algunos por aquí me vayan a regañar ... es broma
Código PHP:
function walk($subdata) {
$tree = array();
$i = 0; $j = count($subdata);
while ($i < $j) {
$prev = $subdata[$i++];
$label = implode('_', $prev);
$tree[$label] = $label;
while (
$i < $j &&
count($prev) < count($subdata[$i]) &&
$prev === array_slice($subdata[$i], 0, count($prev))) {
...
9 lineas más ...
}
Saludos,