0

我需要用相应的开始值和结束值的减法替换所有总值。值来自 sql 结果任何帮助如何做到这一点?例如:

12.30 - 5.00 = 7.30

15.30 - 7.00 = 8.30

16.30 - 9.00 = 7.30

现有阵列

array(184) {
   [1]=>
      array(3) {
         ["start"]=>
         string(4) "5.00"
         ["end"]=>
         string(4) "12.30"
         ["total"]=>
         string(4) "1.00"
      }
   [2]=>
      array(3) {
         ["start"]=>
         string(4) "7.00"
         ["end"]=>
         string(4) "15.30"
         ["total"]=>
         string(4) "1.00"
      }
   [3]=>
      array(3) {
         ["start"]=>
         string(4) "9.00"
         ["end"]=>
         string(4) "16.30"
         ["total"]=>
         string(4) "1.00"
      }
    ... // more records are there
 }

替换最终数组

 array(184) {
    [1]=>
       array(3) {
        ["start"]=>
        string(4) "5.00"
        ["end"]=>
        string(4) "12.30"
        ["total"]=>
        string(4) "7.30"
    }
    [2]=>
      array(3) {
        ["start"]=>
        string(4) "7.00"
        ["end"]=>
        string(4) "15.30"
        ["total"]=>
        string(4) "8.30"
   }
   [3]=>
     array(3) {
       ["start"]=>
       string(4) "9.00"
       ["end"]=>
       string(4) "16.30"
       ["total"]=>
       string(4) "7.30"
   }
... // more records are there
 }
4

5 回答 5

3

试试这个:

foreach($array as &$v){
 $v['total'] = $v['end']-$v['start'];
}
于 2013-08-28T12:16:49.880 回答
2

你可以像@Akam 建议的那样做,或者你可以做很长的路

    $array = array(
        array('start' => '5.00', 'end' => '12.30', 'total' => '1.00'),
        array('start' => '7.00', 'end' => '15.30', 'total' => '1.00'),
        array('start' => '9.00', 'end' => '16.30', 'total' => '1.00'),
   );

    array_walk($array, 
        function(&$arr) { 
           $arr['total'] = $arr['end'] - $arr['start']; 
        }
    );

   var_dump($array);
于 2013-08-28T12:20:28.987 回答
2

试试这个

$array = array(
        array('start' => '5.00', 'end' => '12.30', 'total' => '1.00'),
        array('start' => '7.00', 'end' => '15.30', 'total' => '1.00'),
        array('start' => '9.00', 'end' => '16.30', 'total' => '1.00'),
   );

foreach($array as $key=>$val){
     $array[$key]['total'] = $val['start']+$val['end'];
 }

 var_dump($array);
于 2013-08-28T12:22:38.970 回答
2

将此函数添加到您的代码中:

function timeDiff($first, $second) {
    return str_replace(':', '.', 
        strtotime(str_replace('.', ':', $second)) - 
        strtotime(str_replace('.', ':', $first))
    );
}

然后将您的数组分配给$array变量并使用Akam答案中提供的代码,只需更改y-xtimeDiff(x,y)

foreach($array as &$v){
    $v['total'] = timeDiff($v['start'], $v['end']);
}

这应该够了吧 :)

于 2013-08-28T13:02:53.520 回答
0
 for($i=1; $i<= count($my_array); $i++){

        $end= str_replace('.',':',$my_array[$i]['end']);
        $start = str_replace('.',':',$my_array[$i]['start']);

        $my_array[$i]['total']  =gmdate("H:i",strtotime($end)-strtotime($start));
    }

在这里,我使用 for 循环来更改数组中的所有匹配项。最后以 H:i 格式打印。

于 2013-08-29T01:45:06.423 回答