Ver Mensaje Individual
  #7 (permalink)  
Antiguo 25/06/2014, 15:49
Avatar de dashtrash
dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 927
Antigüedad: 17 años, 8 meses
Puntos: 270
Respuesta: matriz 3x5 niveles forzada

Cita:
Iniciado por NSD Ver Mensaje

La funcion tambien puede resolverse por recursividad, pero se me ocurrio plantearla asi, quizas alguien si esta interesado pueda hacerla como para comparar ambos metodos y buscar la exelencia aunque a fines practicos no es muy relevante.
Una forma muy simple de construir ese array,independientemente de la dimension de la matriz , es:
Código PHP:
Ver original
  1. /*
  2.   La clave es el usuario referido, el valor es el usuario padre.Array ordenado segun el usuario padre.
  3. */
  4. /*
  5.   La clave es el usuario referido, el valor es el usuario padre.Array ordenado segun el usuario padre.
  6. */
  7. $assigns=array(
  8.   3=>1,
  9.   2=>1,
  10.   4=>2,
  11.   5=>2,
  12.   6=>2,
  13.   10=>3,
  14.   11=>3,
  15.   12=>3,
  16.   20=>4,
  17.   21=>4,
  18.   22=>4,
  19.   30=>11,
  20.   31=>11,
  21.   32=>12
  22. );
  23.  
  24. $root=null;
  25. $nodes=array();
  26. foreach($assigns as $key=>$value)
  27. {
  28.    // Por definicion, nunca existira $nodes[$key]
  29.    $nodes[$key]=array();
  30.    if(!isset($nodes[$value]))
  31.    {
  32.        $nodes[$value]=array();
  33.        if($root==null)
  34.        {
  35.            // Al estar ordenados por id de usuario, el primero siempre es root.
  36.              $root=array($value=>& $nodes[$value]);
  37.        }
  38.    }
  39.    $nodes[$value][$key]=& $nodes[$key];
  40.    
  41. }
  42. var_dump($root);

Ejemplo en este link

Última edición por dashtrash; 25/06/2014 a las 16:02