Ver Mensaje Individual
  #11 (permalink)  
Antiguo 13/02/2010, 18:57
Avatar de HackmanC
HackmanC
 
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 18 años, 9 meses
Puntos: 260
Sonrisa Respuesta: Saber posicion en array - Complejo

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,