2

こんばんは

ここで質問があります。$duration_c[$k][$s] の 2 つの配列があります。それはすべて問題なく印刷されます

$duration_c[0][0]="19:30:00";
$duration_c[0][1]="00:10:00";

$duration_c[1][0]="00:30:00";
$duration_c[1][1]="00:20:00";

合計するよりも

$times=$duration_c[$k][$s];
function sum_the_time($times) {

  $seconds = 0;
  foreach ($times as $time)
  {
    list($hour,$minute,$second) = explode(':', $time);
    $seconds += $hour*3600;
    $seconds += $minute*60;
    $seconds += $second;
 }
  $hours = floor($seconds/3600);
  $seconds -= $hours*3600;
  $minutes  = floor($seconds/60);
  $seconds -= $minutes*60;
  // return "{$hours}:{$minutes}:{$seconds}";
  return sprintf('%02d:%02d:%02d', $hours, $minutes, $seconds);
} 
echo sum_the_time($times);

$duration_c[0][0]+$duration_c[0][1] と $duration_c[1][0]+$duration_c[1][1] を合計する方法、および印刷する方法は? foreach() に指定された引数が無効ですというエラーがあります

4

3 に答える 3

1

$times=$duration_c[$k][$s]; $times には値が 1 つしかないため、sum_the_time 関数に値を 1 つだけ送信しています

$times=$duration_c[$k][$s];
echo $times;

使用する

$times=$duration_c[$k];

配列を関数に送信でき、 foreach でエラーが発生しないようにするため

$times=$duration_c[$k]; // contains array of times
function sum_the_time($times) {

  $seconds = 0;
  foreach ($times as $time)
  {
    list($hour,$minute,$second) = explode(':', $time);
    $seconds += $hour*3600;
    $seconds += $minute*60;
    $seconds += $second;
 }
  $hours = floor($seconds/3600);
  $seconds -= $hours*3600;
  $minutes  = floor($seconds/60);
  $seconds -= $minutes*60;
  // return "{$hours}:{$minutes}:{$seconds}";
  return sprintf('%02d:%02d:%02d', $hours, $minutes, $seconds);
} 
echo sum_the_time($times);
于 2012-11-24T17:10:12.767 に答える
1

これにより、PHP コードでの処理が少なくなり、C で記述された PHP ランタイムで可能な限り実行フローが維持されます。

<?php
$duration_c[0][0]="19:30:00";
$duration_c[0][1]="00:10:00";

$duration_c[1][0]="00:30:00";
$duration_c[1][1]="00:20:00";

$sum = 0;
foreach($duration_c as $durations) {
    $today = strtotime('today');
    $sum += array_sum(array_map(function($str) use ($today) {
        return strtotime($str)-$today;
    }, $durations));
}
echo $sum; // 73800 seconds, that's 20.5 hours
于 2012-11-24T17:13:31.790 に答える
0

$times=$duration_c[$k][$s];である必要があります$times=$duration_c[$k];。それ以外の場合は、時間の配列ではなく、単一の時間を関数に渡します。

于 2012-11-24T17:09:22.000 に答える