【问题标题】:Create new array within existing array with each loop in foreach使用 foreach 中的每个循环在现有数组中创建新数组
【发布时间】:2015-07-25 22:10:09
【问题描述】:

我有一个 foreach 循环,对于每个养老金 ID,我使用与该 ID 对应的养老金金额,并将通货膨胀率应用于 30 年的养老金价值。每个人总会有不同数量的独特养老金。

在 foreach 循环中,我能够运行它并让它随着时间的推移产生养老金金额的未来值,并迭代每年增加的值。我遇到的问题是,对于每个养老金 ID,它将新的养老金值添加到名称数组中。

例如,如果个人有 4 份养老金,则在一个数组中生成 120 个数组值。我想要的是 4 个(或有多少养老金)数组,每个数组都有自己独特的养老金值。我的目标是将每个数组中的每个养老金年份加在一起,得出个人每年的养老金总额。

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

(然后根据键将每个数组相加)
Total pension amount array([1] => 300 [2] => 500 [3] => 700

我一直在尝试各种事情,但找不到解决方案,我认为 foreach 可能无法完成此操作。

为了回顾我需要的解决方案,在每次通过 foreach 之后,我需要使用新值创建一个新数组,而不是将它们添加到现有数组中。

任何帮助都会很棒。

这是我现有的代码。

注意:一切都进入$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

【问题讨论】:

    标签: php arrays foreach


    【解决方案1】:

    当你在$pension中使用key时,也许你的问题就解决了:

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

    如果我理解正确,你想这样做:

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

    【讨论】:

    • 是的,确实如此。做得好。很简单。现在下一个挑战是将每个数组的键值加在一起。所以所有数组 key[1] 加在一起,依此类推。有什么想法吗?感谢您的回复
    猜你喜欢
    • 1970-01-01
    • 2014-10-30
    • 2018-03-30
    • 2013-04-19
    • 2014-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多