Foros del Web » Programando para Internet » PHP »

indices en un array php

Estas en el tema de indices en un array php en el foro de PHP en Foros del Web. buenas tengo el siguiente problema: este codigo trabaja con: h_entrada, h_salida. Código PHP: while( $row  =  mysql_fetch_array ( $result_horas )){         $acumuladorHora = 0 ...
  #1 (permalink)  
Antiguo 09/11/2009, 14:27
Avatar de sinai21  
Fecha de Ingreso: octubre-2009
Mensajes: 89
Antigüedad: 14 años, 6 meses
Puntos: 0
Exclamación indices en un array php

buenas tengo el siguiente problema:

este codigo trabaja con: h_entrada, h_salida.


Código PHP:
while($row mysql_fetch_array($result_horas)){
   
   
$acumuladorHora=0;    
   
$acumuladorMinuto=0;        
    
$separar[1]=explode(':',$row['h_entrada']); 
    
$separar[2]=explode(':',$row['h_salida']); 

$total_minutos_trasncurridos[1] = ($separar[1][0]*60)+$separar[1][1]; 
$total_minutos_trasncurridos[2] = ($separar[2][0]*60)+$separar[2][1]; 
$total_minutos_trasncurridos $total_minutos_trasncurridos[1] - $total_minutos_trasncurridos[2]; 

if(
$total_minutos_trasncurridos<=59
    echo(
':'.$total_minutos_trasncurridos.' Minutos'); 
elseif(
$total_minutos_trasncurridos>59){ 
    
$HORA_TRANSCURRIDA round($total_minutos_trasncurridos/60); 
    
$acumuladorHoras=$acumuladorH+$HORA_TRANSCURRIDA;
     
$acumuladorHoras++;    
if(
$HORA_TRANSCURRIDA<=9)
     
$HORA_TRANSCURRIDA='0'.$HORA_TRANSCURRIDA
    
$MINUITOS_TRANSCURRIDOS $total_minutos_trasncurridos%60
       
$acumuladorMinuto=$acumuladorM+$MINUITOS_TRANSCURRIDOS
        
$acumuladorMinuto++;  
if(
$MINUITOS_TRANSCURRIDOS<=9
    
$MINUITOS_TRANSCURRIDOS='0'.$MINUITOS_TRANSCURRIDOS
echo ( 
$acumuladorHora.':'$acumuladorMinuto.' Horas'); 


}  


        echo 
"<p>".$row['h_entrada']." - ".$row['h_salida']." </p>";





el codigo me muestra los minuto o horas trabajadas de los datos dados por el array, pero solo muestra el resultado de un solo rango de hora.


siceramente no se como arreglar el codigo para que me haga lo mismo con los demas rango de horas.

este es el error q tengo:

horas entrada - horas salida

:-18 Minutos
16:16:00 - 16:34:00


Warning: Cannot use a scalar value as an array in C:\xampp\htdocs\p_s_contraloria\horas_trabajadas.p hp on line 45

Warning: Cannot use a scalar value as an array in C:\xampp\htdocs\p_s_contraloria\horas_trabajadas.p hp on line 46
:0 Minutos
13:20:00 - 14:21:00


GRAcias a quien pueda ayudarme
  #2 (permalink)  
Antiguo 09/11/2009, 14:48
Avatar de Vun
Vun
Colaborador
 
Fecha de Ingreso: agosto-2009
Ubicación: Benalmádena, España
Mensajes: 2.265
Antigüedad: 14 años, 9 meses
Puntos: 150
Respuesta: indices en un array php

¿Quieres que se calcule las horas y minutos desde una hora hasta otra no? plantealo claro antes de poner codigo ni nada.

¿quieres tener en cuenta que se pueda introducir por ejemplo desde la hora 22:00 hasta las 03:00? es algo importante a tener en cuenta.

Responde y a partir de ahi trato de ayudarte
  #3 (permalink)  
Antiguo 09/11/2009, 15:00
Avatar de sinai21  
Fecha de Ingreso: octubre-2009
Mensajes: 89
Antigüedad: 14 años, 6 meses
Puntos: 0
Exclamación Respuesta: indices en un array php

realmente lo que hago en mi consulta es pasarle 2 rango de fecha y me trae todas las horas de entrada y las de salida. Quisiera que me ayudaran para calcular las horas trabajadas, el codigo q les presente solo me da el resltado de la primera hora de entrada y la primera hora de salida.


gracias de verdad por su ayuda!
  #4 (permalink)  
Antiguo 09/11/2009, 19:09
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 3 meses
Puntos: 260
Sonrisa Respuesta: indices en un array php

Hola,

El problema es que lo usas tanto como Array así como Scalar. En el primer ciclo $total_minutos_trasncurridos es inicializado a un array y después usado como Scalar, en el segundo ciclo genera un error porque ya es un scalar.

$total_minutos_trasncurridos = Array();
$total_minutos_trasncurridos[1] = .... <-- Array
$total_minutos_trasncurridos[2] = ....
$total_minutos_trasncurridos = $total_minutos_trasncurridos[1] .. <-- Scalar

La solución mas simple es borrar o especificar el array.

Código PHP:
// $total_minutos_trasncurridos = Array(); # Opcion A
// unset($total_minutos_trasncurridos);     # Opcion B
$total_minutos_trasncurridos[1] = ($separar[1][0]*60)+$separar[1][1];  
$total_minutos_trasncurridos[2] = ($separar[2][0]*60)+$separar[2][1];  
$total_minutos_trasncurridos $total_minutos_trasncurridos[1] - $total_minutos_trasncurridos[2]; 
Pero ...

No sé porque complicaste tanto el código, por ejemplo,

Código PHP:
function timeSerial($s) {
    
$t explode(':'$s);
    return 
$t[0] * 3600 $t[1] * 60 $t[2];
}

function 
timeFormat($s) {
    
$h1 = (int) $s 3600;
    
$h2 = (int) ($s &#37; 3600) / 60;
    
return sprintf('%02d:%02d'$h1$h2);
}

// ...

while($row mysql_fetch_array($result_horas)){
    
$a timeSerial($row['h_salida']);
    
$b timeSerial($row['h_entrada']);
    
$diff = ($a $b);
    if (
$b $a$diff += 86400;
    echo
        
round($diff 36002) . ' Horas / ' .
        
timeFormat($diff) . ' Horas' .
        ((
$b $a) ? ' overnight' '') . ".\n";


La función timeSerial te convierte a segundos, despues se restan los segundos de la 'hora de entrada' de la 'hora de salida', y la funcion timeFormat convierte de segundos a 00:00. Si sobrepasa la media noche escribe la palabra 'overnight'.

Saludos,
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 16:16.