2016-06-29 3 views
0

Как я могу добавить array_sum в строку в моем цикле, не создавая для нее другой цикл foreach? Я пытаюсь объединить все числа вместе вместо того, чтобы иметь этот многомерный массив, а затем просто иметь значение, и я вижу, что array_sum не добавит их, потому что его внутри массива. есть идеи?array_sum() для значений внутри массива

$hours_arr = array(); 
foreach($proj_time as $item){ 
    $hours_arr [$item['project_id']]['item_value'] = $item['item_value']; 
    $hours_arr [$item['project_id']]['hours'][] = $item['hours']; 
} 

//output 
array (size=3) 
    4 => 
    array (size=2) 
     'item_value' => string 'Coaching' (length=8) 
     'hours' => 
     array (size=1) 
      0 => string '999.99' (length=6) 
    1487 => 
    array (size=2) 
     'item_value' => string 'Standby' (length=7) 
     'hours' => 
     array (size=1) 
      0 => string '15.00' (length=5) 
    1488 => 
    array (size=2) 
     'item_value' => string 'Standby' (length=7) 
     'hours' => 
     array (size=4) 
      0 => string '10.00' (length=5) 
      1 => string '10.00' (length=5) 
      2 => string '10.00' (length=5) 
      3 => string '10.00' (length=5) 

Я хотел бы мой выход будет

1488 => 
    array (size=2) 
     'item_value' => string 'Standby' (length=7) 
     'hours' => string '40.00' (length=5) 

редактирования: добавлено содержимое $ proj_time

Array 
(
    [0] => Array 
     (
      [project_id] => 4 
      [consultant_id] => 51 
      [engagement_id] => 8 
      [hours] => 999.99 
      [item_value] => Coaching 
     ) 

    [1] => Array 
     (
      [project_id] => 1487 
      [consultant_id] => 1 
      [engagement_id] => 1 
      [hours] => 15.00 
      [item_value] => Standby 
     ) 

    [2] => Array 
     (
      [project_id] => 1488 
      [consultant_id] => 31 
      [engagement_id] => 7 
      [hours] => 10.00 
      [item_value] => Design App RFP 
     ) 

    [3] => Array 
     (
      [project_id] => 1488 
      [consultant_id] => 32 
      [engagement_id] => 41 
      [hours] => 10.00 
      [item_value] => Training 
     ) 

    [4] => Array 
     (
      [project_id] => 1488 
      [consultant_id] => 55 
      [engagement_id] => 41 
      [hours] => 10.00 
      [item_value] => Training 
     ) 

    [5] => Array 
     (
      [project_id] => 1488 
      [consultant_id] => 1 
      [engagement_id] => 1 
      [hours] => 10.00 
      [item_value] => Standby 
     ) 

) 
+0

вы можете показать '$ содержимое proj_time' массива? – RomanPerekhrest

+0

@ RomanPrekhrest Добавил его. – Suzed

ответ

1

Вместо создания массива и затем применяя операцию, создавая i tself почему вы не подытожить так:

DEMO

$hours_arr = array(); 
foreach($proj_time as $item){ 
    $hours_arr [$item['project_id']]['item_value'] = $item['item_value']; 
    if(array_key_exists('hours', $hours_arr [$item['project_id']])) 
     $hours_arr [$item['project_id']]['hours'] += $item['hours']; 
    else 
     $hours_arr [$item['project_id']]['hours'] = $item['hours']; 
} 

Результат:

Array 
(
    [4] => Array 
     (
      [item_value] => Coaching 
      [hours] => 999.99 
     ) 

    [1487] => Array 
     (
      [item_value] => Standby 
      [hours] => 15 
     ) 

    [1488] => Array 
     (
      [item_value] => Standby 
      [hours] => 40 
     ) 

) 
+0

Спасибо, я ценю это. – Suzed

0

Попробовать это

<?php 
    $hours_arr = array(); 
    foreach($proj_time as $item){ 
     if(!isset($hours_arr [$item['project_id']]) || $hours_arr [$item['project_id']]['item_value'] != $item['item_value']) {  
      $hours_arr [$item['project_id']]['item_value'] = $item['item_value']; 
      $hours_arr [$item['project_id']]['hours'][] = $item['hours']; 
     } else { 
      $hours_arr [$item['project_id']]['hours'][0] += $item['hours']; 
     } 
    } 
+0

Не повезло, массив почти все тот же. http://pastebin.com/ci55girE – Suzed

+1

К сожалению, я забыл добавить ключ часами. Попробуйте прямо сейчас – b0ne

+0

Очень близко. – Suzed

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