Hola,
Posiblemente ...
Yo lo haría así, aunque posiblemente exista una forma más simple,
Código PHP:
$orden[0]="0_0_0";
$orden[1]="0_1_0";
$orden[2]="1_0_0";
$orden[3]="2";
$orden[4]="2_0_5";
$orden[5]="2_0_6";
$orden[6]="5";
$orden[7]="5_2";
$orden[8]="6";
$orden[9]="6_1";
$orden[10]="6_1_0";
$orden[11]="6_1_1";
$orden[12]="6_2_0";
1. sort()
2. array's
Código PHP:
$data =>
$orden[0] => [0, 0, 0]
$orden[1] => [0, 1, 0]
[1, 0, 0]
[2]
[2, 0, 5]
[2, 0, 6]
[5]
[5, 2]
[6]
[6, 1]
[6, 1, 0]
[6, 1, 1]
[6, 2, 0]
3. first pass - recursive
Mover todos los que coincidan en el nivel 1.
Barrer el array, todos los que coincidan con un nivel superior (1 elemento) moverlos hacia adentro sub-array.
Código PHP:
[0, 0, 0]
[0, 1, 0]
[1, 0, 0]
[2] =>
[2, 0, 5]
[2, 0, 6]
[5] =>
[5, 2]
[6] =>
[6, 1]
[6, 1, 0]
[6, 1, 1]
[6, 2, 0]
4. second pass
Mover todos los que coincidan en el nivel 2.
Esta es la parte recursiva, entra en la misma función anterior, pero solamente pasa como parámetros el sub-array, pasar por referencia.
Ya no verifica igualdad de 1 elemento, sino 2.
Código PHP:
[0, 0, 0]
[0, 1, 0]
[1, 0, 0]
[2] =>
[2, 0, 5]
[2, 0, 6]
[5] =>
[5, 2]
[6] =>
[6, 1] =>
[6, 1, 0]
[6, 1, 1]
[6, 2, 0]
5. Repetir con los demás niveles
La misma operación recursiva, solamente pasa el sub-array por referencia.
Ya no verifica igualdad de 2 elementos, sino 3.
6. Renumerar - recursiva
Código PHP:
[0, 0, 0] / 0
[0, 1, 0] / 1
[1, 0, 0] / 2
[2] => / 3
[2, 0, 5] / 3.1
[2, 0, 6] / 3.2
[5] => / 4
[5, 2] / 4.1
[6] => / 5
[6, 1] => / 5.1
[6, 1, 0] / 5.1.1
[6, 1, 1] / 5.1.2
[6, 2, 0] / 5.2
7. Posiblemente extraer a un nuevo array plano; barrer recursivamente y agregar al final de un array global.
Saludos,