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 % 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 / 3600, 2) . ' 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,