Foros del Web » Programando para Internet » PHP »

Ordenar array multidimensional

Estas en el tema de Ordenar array multidimensional en el foro de PHP en Foros del Web. Hola a todos, Tengo un script que almacena valores en un array multidimensional, el array es el siguiente: Código PHP: $linea [ $contador ][ "clase" ...
  #1 (permalink)  
Antiguo 03/02/2008, 15:28
 
Fecha de Ingreso: abril-2003
Mensajes: 363
Antigüedad: 21 años, 6 meses
Puntos: 3
Ordenar array multidimensional

Hola a todos,

Tengo un script que almacena valores en un array multidimensional, el array es el siguiente:
Código PHP:
$linea[$contador]["clase"]='prueba';
$linea[$contador]["detalle"]='este es el detalle';
$linea[$contador]["cantidad"]=1
El primer valor va asignado por un contador que va 0, 1, 2, ...
Necesito agrupar todos los que tengan la misma clase en un nuevo array e ir sumando las cantidades respectivas, es decir, si tengo dos con clase prueba y con valores 1 y 4, en el nuevo array tiene que aparecer uno que con clase prueba y cantidad 5.

Es que nose ni por donde empezar.
¿Me podéis hechar una mano?

Muchas Gracias
  #2 (permalink)  
Antiguo 03/02/2008, 20:32
Avatar de cleek  
Fecha de Ingreso: diciembre-2006
Ubicación: Atras del cocodrilo
Mensajes: 122
Antigüedad: 17 años, 11 meses
Puntos: 1
Re: Ordenar array multidimensional

una opción sería hacerlo a manita con foreach
Código:
$orden = array();
foreach($linea as $l)
{
  //$orden[$l['clase']] = (empty($orden[$l['clase']]) ? 0 : $orden[$l['clase']];
  $orden[$l['clase']] += $l['cantidad];
}
creo que eso es lo que necesitas. Si por alguna razón no funciona tal como está, descomenta la linea // y asunto arreglado. Esperemos que no sea necesaria.

Saludos
__________________
:: nocturno ::
inGenia soluciones
  #3 (permalink)  
Antiguo 04/02/2008, 01:49
 
Fecha de Ingreso: abril-2003
Mensajes: 363
Antigüedad: 21 años, 6 meses
Puntos: 3
Re: Ordenar array multidimensional

Gracias por tu respuesta cleek, pero no funciona, ni descomentando la linea //.

de todas formas creo que antes no me he explicado bien, porque sino me equivoco lo que hace es sumar en clase la cantidad, pero lo que yo necesito hace lo siguiente:
tenemos un array "linea" con los valores:
clase | detalle | cantidad
------------------------------
prueba1 | este es el detalle | 5
prueba2 | esta sería otro detalle | 3
prueba1 | este es el detalle | 2
prueba1 | este es el detalle | 3

el nuevo array "orden" debería tener:
clase | detalle | cantidad
------------------------------
prueba1 | este es el detalle | 10
prueba2 | esta sería otro detalle | 3

Gracias a todos por vuestra ayuda.
  #4 (permalink)  
Antiguo 04/02/2008, 05:06
 
Fecha de Ingreso: abril-2003
Mensajes: 363
Antigüedad: 21 años, 6 meses
Puntos: 3
Re: Ordenar array multidimensional

Hola,

Este es un ejemplo del array es el siguiente:

Array (
[0] => Array (
[clase] => prueba1
[detalle] => este es el detalle
[cantidad] => 5
)
[1] => Array (
[clase] => prueba2
[detalle] => este es el detalle
[cantidad] => 3
)
[2] => Array (
[clase] => prueba1
[detalle] => este es el detalle
[cantidad] => 2
)
[3] => Array (
[clase] => prueba1
[detalle] => este es el detalle
[cantidad] => 3
)
)

Y se debería convertir en un array:
Array (
[0] => Array (
[clase] => prueba1
[detalle] => este es el detalle
[cantidad] => 10
)
[1] => Array (
[clase] => prueba2
[detalle] => este es el detalle
[cantidad] => 3
)
)

Un Saludo
  #5 (permalink)  
Antiguo 04/02/2008, 06:23
Avatar de cleek  
Fecha de Ingreso: diciembre-2006
Ubicación: Atras del cocodrilo
Mensajes: 122
Antigüedad: 17 años, 11 meses
Puntos: 1
Re: Ordenar array multidimensional

Así es como se me ocurre sin darle muchas vueltas

Código PHP:
$tmp = array();
foreach (
$linea as $l)
{
  if ( empty(
$tmp$l['clase'] ]) )
  {
    
$tmp$l['clase'] ] = array();
    
$tmp$l['clase'] ]['cantidad'] = $l['cantidad'];
    
$tmp$l['clase'] ]['detalle'] = $l['detalle'];
    
$tmp$l['clase'] ]['clase'] = $l['clase'];
  }
  else
  {
    
$tmp$l['clase'] ]['cantidad'] += $l['cantidad'];
  }
}

$orden $tmp;

/*
$orden = array();
foreach ($tmp as $l)
{
  $orden[] = $l;
}
*/ 
Ahi está, creo que este si es el bueno, ora si, ora si. Seguramente ya habrás captado la idea de como se ordenan los arreglos, verdad. Sino, también puedes darle una revisara a array_multisort o usort. Espero te haya ayudado.

Saludos
__________________
:: nocturno ::
inGenia soluciones
  #6 (permalink)  
Antiguo 04/02/2008, 06:24
Avatar de cleek  
Fecha de Ingreso: diciembre-2006
Ubicación: Atras del cocodrilo
Mensajes: 122
Antigüedad: 17 años, 11 meses
Puntos: 1
Re: Ordenar array multidimensional

Igual, si no es EXACTAMENTE lo que quieres, descomenta y con suerte se te resuelve.
__________________
:: nocturno ::
inGenia soluciones
  #7 (permalink)  
Antiguo 04/02/2008, 09:24
 
Fecha de Ingreso: abril-2003
Mensajes: 363
Antigüedad: 21 años, 6 meses
Puntos: 3
Re: Ordenar array multidimensional

Parace que todo va correcto.

Muchas Gracias cleek
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:00.