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: 16 años, 3 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] => [000]
    
$orden[1] => [010]
    [
100]
    [
2]
    [
205]
    [
206]
    [
5]
    [
52]
    [
6]
    [
61]
    [
610]
    [
611]
    [
620
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:
[000]
[
010]
[
100]
[
2] =>
    [
205]
    [
206]
[
5] =>
    [
52]
[
6] =>
    [
61]
    [
610]
    [
611]
    [
620
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:
[000]
[
010]
[
100]
[
2] =>
    [
205]
    [
206]
[
5] =>
    [
52]
[
6] =>
    [
61] =>
        [
610]
        [
611]
    [
620
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:
[000] / 0
[010] / 1
[100] / 2
[2] => / 3
    
[205] / 3.1
    
[206] / 3.2
[5] => / 4
    
[52] / 4.1
[6] => / 5
    
[61] => / 5.1
        
[610] / 5.1.1
        
[611] / 5.1.2
    
[620] / 5.2 
7. Posiblemente extraer a un nuevo array plano; barrer recursivamente y agregar al final de un array global.

Saludos,