I need to replace all the total values with the corresponding subtraction of start and end values. Values are come from a sql result Any help how to do that? For Ex :
12.30 - 5.00 = 7.30
15.30 - 7.00 = 8.30
16.30 - 9.00 = 7.30
Existing array
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
}
Replaced final array
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
}
Add this function to your code:
function timeDiff($first, $second) {
return str_replace(':', '.',
strtotime(str_replace('.', ':', $second)) -
strtotime(str_replace('.', ':', $first))
);
}
Then assign your array to $array
variable and use code provided in Akam's answer, just change y-x
to timeDiff(x,y)
:
foreach($array as &$v){
$v['total'] = timeDiff($v['start'], $v['end']);
}
That should do the trick :)
Try this:
foreach($array as &$v){
$v['total'] = $v['end']-$v['start'];
}
You can do like what @Akam suggest or you can do the long way
$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);
Try with this
$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);
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));
}
Here I used the for loop to change all the occurrences in my array. And finally print it in the H:i format.