Ver Mensaje Individual
  #1 (permalink)  
Antiguo 30/05/2014, 22:34
Avatar de catpaw
catpaw
 
Fecha de Ingreso: mayo-2010
Ubicación: xalapa
Mensajes: 856
Antigüedad: 14 años, 5 meses
Puntos: 23
simular count group by para un array

que tal forer@s,

traigo este problemilla, veran, tengo un arreglo mas o menos asi:

$items =
array(
array("fecha"->"2014-05-26", "clave"->"11"),
array("fecha"->"2014-05-26", "clave"->"10"),
array("fecha"->"2014-05-26", "clave"->"06"),
array("fecha"->"2014-05-26", "clave"->"10"),
array("fecha"->"2014-05-27", "clave"->"11"),
array("fecha"->"2014-05-27", "clave"->"06"),
array("fecha"->"2014-05-28", "clave"->"10"),
array("fecha"->"2014-05-28", "clave"->"10"),
array("fecha"->"2014-05-28", "clave"->"02"),
array("fecha"->"2014-05-28", "clave"->"01"),
array("fecha"->"2014-05-29", "clave"->"06"),
array("fecha"->"2014-05-29", "clave"->"02"),
array("fecha"->"2014-05-30", "clave"->"10"),
array("fecha"->"2014-05-30", "clave"->"03")
);

como se observa es una fecha y una clave, la fecha esta ordenada de menor a mayor.

la idea es obtener lo siguiente:

clave: 01
fecha: 2014-05-26
total:0
fecha: 2014-05-27
total:0
fecha: 2014-05-28
total:1
fecha: 2014-05-29
total:0
fecha: 2014-05-30
total:0

--

clave: 02
fecha: 2014-05-26
total:0
fecha: 2014-05-27
total:0
fecha: 2014-05-28
total:1
fecha: 2014-05-29
total:1
fecha: 2014-05-30
total:0

--

clave: 03
fecha: 2014-05-26
total:0
fecha: 2014-05-27
total:0
fecha: 2014-05-28
total:0
fecha: 2014-05-29
total:0
fecha: 2014-05-30
total:1

--

clave: 06
fecha: 2014-05-26
total:1
fecha: 2014-05-27
total:1
fecha: 2014-05-28
total:0
fecha: 2014-05-29
total:1
fecha: 2014-05-30
total:0

--

clave: 10
fecha: 2014-05-26
total:2
fecha: 2014-05-27
total:0
fecha: 2014-05-28
total:2
fecha: 2014-05-29
total:0
fecha: 2014-05-30
total:1

--

clave: 11
fecha: 2014-05-26
total:1
fecha: 2014-05-27
total:1
fecha: 2014-05-28
total:0
fecha: 2014-05-29
total:0
fecha: 2014-05-30
total:0

es decir, agrupar por clave y fecha y contar cuantos hay en cada uno.

mi idea es:

Código PHP:
$inicio "2014-05-26";
$fin "2014-05-30";
foreach(
$claves as $clave){
    for(
$i=$inicio;$i<=$fin;$i=date('Y-m-d'strtotime('+1 day'))){
        for(
$j=0;$j<count($items);$j++){
              if(
$items[$j]['fecha']==$i){
                    
$acomulado++;     
              }
        }
    }

pero de ahi ya no se como recabar la informacion como la necesito, ni donde reiniciar el acomulado.

primero recorro las claves, por cada clave, recorro las fechas desde la inicial y le voy sumando un dia hasta la fecha final, dentro de este ciclo recorro todo el arreglo items y pregunto si es la misma fecha entonces le acomulo uno.

el problema como ya dije es que ya no me imagino como recabar en otro arreglo la informacion que necesito y que si este metodo es bastante tardado y ademas cuando haya mas datos yo creo que va a tronar.

si ustedes tienen alguna sugerencia o aporte se los agradeceria mucho.