douan6931 2015-07-24 03:57
浏览 81
已采纳

使用foreach中的每个循环在现有数组中创建新数组

I have a foreach loop which, for each pension ID, i am using the pension amount that corresponds to that ID and applying an inflation rate to the pension value over 30 years. There will always be a variable amount of unique pensions for each person.

In the foreach loop I am able to run it and have it produce the future value of the pension amount over time, iterating each years increased values. The problem i am running into is that for each pension id it is adding the new pension values into the name array.

For example, if the individual has 4 pensions, that produces 120 array values in one array. What I am wanting is 4 (or how many pensions are there) arrays with each unique pension values in its own array. My goal is to then add each pension year from each array together and come to a total pension amount for the individual for each year.

Example.
pension 1 array([1] => 100 [2] => 200 [3] => 300…….
pension 2 array([1] => 200 [2]=> 300 [3] => 400……

(then adding each array together based on key)
Total pension amount array([1] => 300 [2] => 500 [3] => 700

I have been trying all sorts of things but can’t find a solution, Im thinking the foreach might not be able to accomplish this.

To to recap the solution I need, after each pass of the foreach I need to create a new array with the new values and not have them add to the existing array.

Any help would be wonderful.

Here is my existing code.

note: everything is going into $pension[]

foreach($pen_start as $key => $value){

    if($value < $age){
        if($pen_cola[$key] == 'Yes'){
            $i = 0;
            $a = $age;
            $previous = $pen_amount[$key];
            while($i <= 29 ){
            $pension[] = str_replace(',','',number_format(($previous*1.02),2));
            $previous = $previous*1.02;
            $i++;
            $a++;
            };
            // if yes end
        } else if($pen_cola[$key] == 'No' || $pen_cola[$key] == ''){

            $i = 0;
            $a = $age;
            $previous = $pen_amount[$key];
            while($i <= 29 ){

            $pension[] = str_replace(',','',number_format(($previous),2));
            $previous = $previous;
            $i++;
            $a++;
            };
        } // if no end
    } // if older end
    else if($value > $age){
        if($pen_cola[$key] == 'Yes'){
            $i = 0;
            $a = $age;
            $previous = 0;
            while($i <= 29 ){

                if($a < $value){
                    $amount = 0;
                }else if($previous == 0){
                    $amount = $pen_amount[$key];}
                    else {$amount = $previous;}

            $pension[] = str_replace(',','',number_format(($amount*1.02),2));
            $previous = $amount*1.02;
            $i++;
            $a++;
            };
            // end if yes
        }  else if($pen_cola[$key] == 'Yes'){
            $i = 0;
            $a = $age;
            $previous = 0;
            while($i <= 29 ){

                if($a < $value){
                    $amount = 0;
                }else if($previous == 0){
                    $amount = $pen_amount[$key];}
                    else {$amount = $previous;}

            $pension[] = str_replace(',','',number_format(($amount),2));
            $previous = $amount;
            $i++;
            $a++;
            };
        } //end if no
    } // if younger end
} // end foreach
  • 写回答

1条回答 默认 最新

  • douhan8610 2015-07-24 04:53
    关注

    Maybe your problem is solved when you use the key in $pension:

    $pensions[$key][] = str_replace(',','',number_format(($amount),2));
    

    If I understand it right, you want to do this:

    $result = array(); //or in php 5.5+ []
    foreach($pensions as $pension){
       foreach($pension as $key => $amount){
           if(!isset($result[$key])){
              $result[$key] = 0;
           }
           $result[$key] += $amount;
       }
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 乌班图ip地址配置及远程SSH
  • ¥15 怎么让点阵屏显示静态爱心,用keiluVision5写出让点阵屏显示静态爱心的代码,越快越好
  • ¥15 PSPICE制作一个加法器
  • ¥15 javaweb项目无法正常跳转
  • ¥15 VMBox虚拟机无法访问
  • ¥15 skd显示找不到头文件
  • ¥15 机器视觉中图片中长度与真实长度的关系
  • ¥15 fastreport table 怎么只让每页的最下面和最顶部有横线
  • ¥15 java 的protected权限 ,问题在注释里
  • ¥15 这个是哪里有问题啊?