2016-09-01 6 views
0

Это мой массив, мне нужно, чтобы добавить все суммы, если они вместе, например, 1000 | 1000Foreach массив взрываются сумма общая сумма

Array 
    (
     [0] => stdClass Object 
      (
       [student_no] => 8080808128 
       [amt] => 1000|1000 
       [main_receipt] => M_0000000001 
      ) 

     [1] => stdClass Object 
      (
       [student_no] => 8080808128 
       [amt] => 500 
       [main_receipt] => M_312312321 
      ) 

     [2] => stdClass Object 
      (
       [student_no] => 8569544855 
       [amt] => 500 
       [main_receipt] => M_000000026 
      ) 

     [3] => stdClass Object 
      (
       [student_no] => 9172544146 
       [amt] => 1000 
       [main_receipt] => M_000000
      ) 

     [4] => stdClass Object 
      (
       [student_no] => 9541256358 
       [amt] => 1000|1000|500 
       [main_receipt] => M_000000022 
      ) 

     [5] => stdClass Object 
      (
       [student_no] => 9892469054 
       [amt] => 1000 
       [main_receipt] => M_0000000002 
      ) 

    ) 

$newar=0; 
foreach($fa as $key){ 

     $temp= explode('|',$key->amt); 
foreach($temp as $tem =>$va){ 
echo $va."<br>"; 
    $newar += $va; 
    $array[]=$newar; 

им пытаются построить новый массив, в котором суммируется АМТ

для например

[0] => stdClass Object 
       (
        [student_no] => 8080808128 
        [amt] => 2000 
        [main_receipt] => M_0000000001 
       ) 
    [1] => stdClass Object 
       (
        [student_no] => 8080808128 
        [amt] => 500 
        [main_receipt] => M_312312321 
       ) 

      [2] => stdClass Object 
       (
        [student_no] => 8569544855 
        [amt] => 500 
        [main_receipt] => M_000000026 
       ) 

      [3] => stdClass Object 
       (
        [student_no] => 9172544146 
        [amt] => 1000 
        [main_receipt] => M_000000
       ) 

уведомления, как в [0] массиве ключей значение суммы составило. Im пытается construt этого типа массива, но я не могу показаться, чтобы получить логику .......

Я знаю, что моя нынешняя логика просто добавить значения в ключ массива

+0

Пожалуйста, добавьте пример, что вы пробовали. – SCC

+0

array_sum (explode ('|', $ obj-> amt))? – Eihwaz

+0

@Eihwaz. Я попробую это .... –

ответ

3

Разделите когда | появляется и вычислить сумму, используя array_sum()

foreach($data as &$array) { 
    $array->amt = array_sum(explode('|', $array->amt)); 
} 
0

Вам нужно установить $newar назад 0 перед циклом через разобранную сумму. В противном случае вы добавляете суммы из всех объектов вместе. Вы также можете просто использовать array_sum(), чтобы суммировать все элементы взорванной суммы.

И если вы хотите объекты в новом массиве, вам нужно создать объекты, а не просто хранить общее количество в массиве.

foreach ($fa as $obj) { 
    $temp = explode('|', $obj->amt); 
    $newar = array_sum($temp); 
    $newobj = clone $obj; 
    $newobj->amt = $newar; 
    $array[] = $newobj; 
} 
0

По своей цели:

«чтобы построить новый массив, где амт суммируется»

использовать следующий раствор с array_map, strpos (чтобы проверить, есть ли разделитель | в пределах amt свойство во избежание избыточного разделения) и array_sum функции:

// $arr is your initial array 
$new_arr = array_map(function($obj){ 
    $obj->amt = (strpos($obj->amt, "|") !== false)? array_sum(explode("|", $obj->amt)) : $obj->amt; 
    return $obj; 
}, $arr); 

print_r($new_arr); 
Смежные вопросы