2016-09-01 40 views
0

这是我的阵列我需要补充的全部款项,如果他们在一起,例如1000 | 1000年的foreach阵列爆炸量总量

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; 

我尝试建立一个新的数组,其中AMT是总计

适用于例如

[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]键阵列中金额值的总和。我试着去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

用户需要通过爆炸量循环之前设置$newar0的总和。否则,您会将所有对象的金额相加。您也可以使用array_sum()来总计爆炸量的所有元素。

如果你想要在新数组中的对象,你需要创建对象,而不仅仅是存储在数组中。

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

根据你的目标:

“建立一个新的数组,其中AMT是总计”

使用与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);