2013-08-28 3 views
0

Мне нужно заменить все общие значения на соответствующее вычитание начального и конечного значений. Значения поступают из результата sql Любая помощь, как это сделать? Для Ex:заменить значение в многомерном массиве-фате

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 
} 
+1

У нас есть время или количество (10) чисел здесь? Например, 5.20-4.30 = 0.90 в базе (10) и 5.20-4.30 = 0.50 раз. Я предполагаю, что пришло время, но хочу быть уверенным, прежде чем дать вам ответ (потому что оба уже опубликованных ответа основаны на десятичных знаках, а не на времени). –

+0

да пришло время – gecco

+0

@MichalPrajsnar, у вас есть хорошая точка здесь. – invisal

ответ

2

Добавьте эту функцию в код :

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

Затем присвоить массив $array переменной и использовать код, предоставленный в Akam «s ответ, просто изменить y-x к timeDiff(x,y):

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

Это должно сделать трюк :)

+0

Thanx alot. Я использовал ваш метод и добавил еще кое-что и, наконец, заработал. :) вы, ребята, камни :) – gecco

+0

Тем не менее, я был замедлен, и принятый ответ неправильный. –

3

Попробуйте это:

foreach($array as &$v){ 
$v['total'] = $v['end']-$v['start']; 
} 
+0

Thanx. Я попробую его и посмотрю – gecco

+0

Извините, что он дает ошибку: Сообщение: Undefined index: end – gecco

+0

Сообщение: Undefined index: start Имя файла: controllers/reports_generator.php. – gecco

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); 
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); 
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)); 
    } 

Здесь я использовал для чтобы изменить все вхождения в моем массиве. И, наконец, напечатайте его в формате H: i.

Смежные вопросы