Ver Mensaje Individual
  #17 (permalink)  
Antiguo 30/11/2011, 15:30
enrique4480
 
Fecha de Ingreso: diciembre-2010
Ubicación: valencia
Mensajes: 203
Antigüedad: 13 años, 4 meses
Puntos: 11
Respuesta: Ordenar Anidado o pájaro dodo

Te lo explico paso a paso para que lo entiendas bien.

Código PHP:
$tmp = array(); //array temporal

foreach($resultado as $v)
{
 
$tmp[$v['Apellido']][] = $v;  //$v es el array N dentro de $resultado ("emulando" que fuese una consulta).

el array $tmp[$v['Apellido']] crea una key con el apellido, de esta forma todos los nombres del apellido se encuentran en esa key. por ejemplo:

en $tmp['Pérez'] hay 2 arrays que serian Hugo y Paco que se apellidan Pérez.

ahora el otro bucle:

Código PHP:
foreach($tmp as $k => $v
$tmp es el array creado con los datos, $k es el nombre de la key en el array (López y Pérez en este caso) y $v es el array ya agrupado por apellidos.

en el foreach interno

Código PHP:
foreach($v as $vv)  //se recorre cada elemento del array "agrupado".
 
{
  echo 
"<li>".$vv['Nombre']."</li>";
 } 
edito: añado una clase de ejempo que deja el codigo mas limpio y es mas comodo:

Código PHP:
Ver original
  1. class grupos
  2. {
  3.  private $resultado;
  4.  
  5.  function __construct()
  6.  {
  7.   $this->resultado = array();
  8.  }
  9.  
  10.  public function insertar($k,$arr)
  11.  {
  12.   /*
  13.      Añade a $resultado['Apellido'] el nuevo elemento.
  14.      siendo Apellido el apellido de esa persona.
  15.   */
  16.   $this->resultado[$k][] = $arr;
  17.  }
  18.  
  19.  public function obtener($key)
  20.  {
  21.   /*
  22.      Obtener los datos agrupados en un array.
  23.      Para obtener solo los "Pérez", $key = Pérez.
  24.      Si el array no contiene la key $key retorna todos los nombres ordenados.
  25.   */
  26.   if(!array_key_exists($key,$this->resultado))
  27.   {
  28.    return $this->resultado;
  29.   }
  30.   return $this->resultado[$key];
  31.  }
  32. }

ejemplo de uso:

Código PHP:
Ver original
  1. $resultado = array(array('Nombre' => 'Luis','Apellido' => 'López'),
  2.                    array('Nombre' => 'Hugo','Apellido' => 'Pérez'),
  3.                    array('Nombre' => 'Pancho','Apellido' => 'López'),
  4.                    array('Nombre' => 'Pepe','Apellido' => 'Pérez'));
  5.  
  6. $g = new grupos();
  7. //recorremos el array
  8. foreach($resultado as $v)
  9. {
  10.  //añadimos un nuevo elemento
  11.  $g->insertar($v['Apellido'],$v);
  12. }
  13.  
  14. //obtener solo los López
  15. print_r($g->obtener("López"));
  16. //obtener solo los Pérez
  17. print_r($g->obtener("Pérez"));
  18. //obtener todos
  19. print_r($g->obtener("Todos"));
  20. /*

no tiene pq ser asi, son solo ideas.

Última edición por enrique4480; 30/11/2011 a las 16:03