Foros del Web » Programando para Internet » PHP »

listar con arrays (totalizaciones)

Estas en el tema de listar con arrays (totalizaciones) en el foro de PHP en Foros del Web. Hola qué tal? siempre leo el foro cuando tengo alguna duda y casi siempre encuentro respuesta, pero al no poder continuar con el problema que ...
  #1 (permalink)  
Antiguo 07/08/2012, 15:11
 
Fecha de Ingreso: agosto-2012
Mensajes: 3
Antigüedad: 11 años, 8 meses
Puntos: 0
listar con arrays (totalizaciones)

Hola qué tal? siempre leo el foro cuando tengo alguna duda y casi siempre encuentro respuesta, pero al no poder continuar con el problema que se me presenta, me he decidido a registrarme y abrir un post; bien os cuento mi problema, tengo que mostrar de una consulta un listado de maquinas y la sumas de las repetidas para que sean una más.
Más gráficamente, tengo esto:
Código:
maquina 1   00:35
maquina 2   01:34
maquina 2   01:45
maquina 3   00:24
maquina 1   00:12
maquina 2   00:15
y quiero mostrar esto:
Código:
maquina 1   00:47
maquina 2   03:34
maquina 3   00:24
Os paso mi código (creo que fue pillado de alguien de este foro) que lo hace en parte, y el problema que tengo es que no me suma la totalidad solo el primer repetido con su último repetido... un sin sentido, espero que podáis ayudarme.

Código PHP:
    $maquina1 mysql_query("SELECT maquina, horas FROM trabajos WHERE idparte = '".$idparte."' AND estado = 0 ORDER BY maquina");
    if (
$row mysql_fetch_array($maquina1)){
        do {
             
$nommaq[] = $row['maquina'];
             
$horas[] = $row['horas'];
        }
        while (
$row mysql_fetch_array($maquina1));
    }
    echo 
'<pre>';
    
print_r($nommaq);
    
print_r($horas);
    echo 
'</pre>';
    
$arr = array();
    
$nt = array();
    
$ns = array();
    
$x 0;
    
$sumas 0;
     
    foreach (
$nommaq as $i => $maq1) {
        foreach (
$nommaq as $i2 => $maq2) {
        if (
$maq1 == $maq2 ) {
            
$x++;
            
$sumas suma_horas($horas[$i2],$horas[$i]);
            unset(
$nommaq[$i2]);
        }
        }
        if (
$x >= 2) {
        
$arr[$i] = $maq1;
        
$nt[] = $maq1;
        
$ns[] = $sumas;
        } else if (
$x == 1) {
        
$nt[] = $maq1;
        
$ns[] = $horas[$i];
        }
        
$x 0;
        
$sumas 0;
    }
    echo 
'<pre>';
    
print_r($nt);
    
print_r($ns);
    echo 
'</pre>'
y me da este resultado:
Código PHP:
Array
(
    [
0] => Cosedora 2
    
[1] => LimpiaV
    
[2] => LimpiaV
    
[3] => LimpiaV
    
[4] => LimpiaV
    
[5] => maquina 1 ayudante
    
[6] => maquina 1 ayudante
    
[7] => maquina 1 ayudante
)
Array
(
    [
0] => 00:06
    
[1] => 02:17
    
[2] => 00:01
    
[3] => 00:19
    
[4] => 00:12
    
[5] => 02:18
    
[6] => 03:46
    
[7] => 00:14
)
Array
(
    [
0] => Cosedora 2
    
[1] => LimpiaV
    
[2] => maquina 1 ayudante
)
Array
(
    [
0] => 00:06
    
[1] => 2:29
    
[2] => 2:32

  #2 (permalink)  
Antiguo 07/08/2012, 16:44
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 15 años, 11 meses
Puntos: 528
Respuesta: listar con arrays (totalizaciones)

Pues creo que te complicas demasiado.

No sé en que formato exacto obtienes las horas, pero veo que las procesas con la función suma_horas.

Código PHP:
Ver original
  1. $maquinas = mysql_query("SELECT maquina, horas FROM trabajos WHERE idparte = '".$idparte."' AND estado = 0 ORDER BY maquina");
  2. while($m=mysql_fetch_assoc($maquinas)){
  3.   if(isset($maq_total[$m['maquina']]))
  4.       $maq_total[$m['maquina']]=suma_horas($maq_total[$m'[maquina']],$m['horas']);
  5.   else
  6.       $maq_total[$m['maquina']]=suma_horas($m[$m['horas']],0);//si la hora debe ser pasa en formato h:m, se puede pasar '00:00' en vez de 0
  7. }
  #3 (permalink)  
Antiguo 08/08/2012, 19:37
 
Fecha de Ingreso: agosto-2012
Mensajes: 3
Antigüedad: 11 años, 8 meses
Puntos: 0
Respuesta: listar con arrays (totalizaciones)

Huyy!! casi, me he emocionado y todo, vaya, gracias, no pensaba que fuera a poder simplificarse tanto, pero no me da bien el resultado:

Código PHP:
NoticeUndefined index00:06 in C:Desarrolloxampphtdocslistados2.php on line 73

Notice
Undefined offset1 in C:Desarrolloxampphtdocsincludesfunc.inc.php on line 140

Notice
Undefined index02:17 in C:Desarrolloxampphtdocslistados2.php on line 73

Notice
Undefined offset1 in C:Desarrolloxampphtdocsincludesfunc.inc.php on line 140

Notice
Undefined index02:18 in C:Desarrolloxampphtdocslistados2.php on line 73

Notice
Undefined offset1 in C:Desarrolloxampphtdocsincludesfunc.inc.php on line 140

Array
(
    [
Cosedora 2] => 0:00
    
[LimpiaV] => 0:32
    
[maquina 1 ayudante] => 4:00

linea 73:
Código PHP:
$maq_total[$m['maquina']]=suma_horas($m[$m['horas']],"00:00"); 
linea 140 del archivo include funciones:
Código PHP:
$minutos=(int)$hora1[1]+(int)$hora2[1]; 
Quizas sea por la función, que ciertamente la has intuido bien, te la dejo para que veas su funcionamiento, que anteriormente se me olvidó:
Código PHP:
function suma_horas($hora1$hora2){
    
$hora1=explode(":",$hora1);
    
$hora2=explode(":",$hora2);
    
$horas=(int)$hora1[0]+(int)$hora2[0];
    
$minutos=(int)$hora1[1]+(int)$hora2[1];
    
$horas+=(int)($minutos/60);
    
$minutos=$minutos%60;
    if(
$minutos<10)$minutos="0".$minutos;
    return (
$horas.":".$minutos);

Gracias de verdad opc001a eres un fiera!
  #4 (permalink)  
Antiguo 09/08/2012, 12:20
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 15 años, 11 meses
Puntos: 528
Respuesta: listar con arrays (totalizaciones)

Perdón, si coloqué mal la línea:

$maq_total[$m['maquina']]=suma_horas($m[$m['horas']],"00:00");

debe ser:

$maq_total[$m['maquina']]=suma_horas($m['horas'],"00:00");
  #5 (permalink)  
Antiguo 09/08/2012, 12:47
 
Fecha de Ingreso: agosto-2012
Mensajes: 3
Antigüedad: 11 años, 8 meses
Puntos: 0
Respuesta: listar con arrays (totalizaciones)

Muchas gracias, cop001a, normalmente solucionas todo lo que se expone, eres una maquina!
Ahí queda por si a alguien le hace falta. ¡Solucionado!

Etiquetas: arrays, mysql
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:40.