PHP:嵌套的foreach循环和传递值

时间:2018-11-06 13:17:00

标签: php arrays foreach nested-loops

我有两个数组

    $invoice = array
    (
        array("id"=>1,"amt"=>2000.00),
        array("id"=>2,"amt"=>3000.00),
        array("id"=>3,"amt"=>4000.00)
    );


$payments = array
    (
        array("id"=>11111,"amt"=>500.00),
        array("id"=>22222,"amt"=>3000.00),
        array("id"=>33333,"amt"=>4500.00),
        array("id"=>44444,"amt"=>1500.00)
    );

我的意图是从付款“修改”中结算发票“修改”,脚本将以有序的方式执行。

但是,两个数组元素的大小可能会有所不同。

例如: 1. 发票数组的第一个元素“ amt” 2000将扣除付款数组的第一个元素“ amt” 500

  1. 扣除后,发票值的余额1500将从付款数组“ amt”的第二元素中扣除3000

  2. 这将一直进行到我到达最后一个付款数组元素

下面的代码是我编写的,到目前为止,该代码执行了一次成功的迭代,但是由于嵌套的foreach循环从头开始,所以在第二次迭代中未能执行相同的操作。

$flag = 0; //default / initial value 0 - start / 1- invoice / 2 - payments
$setlData = 0; // remaining balance after a settlement
$invoice_count = count($invoice);
$trx_count = count($payments);
$iteration = 0;    

$output = "<table><thead><tr><th>inv#</th><th>invoice value</th><th>txn#</th><th>payment value</th><th>balance after settlement</th><th>from</th></tr></thead><tbody>";

foreach($payments as $p){

    //echo($flag."<br />");
    if($setlData > 0 and $flag == 1) {
        if($i["amt"] < $p["amt"]){
            $setlData = $p["amt"] - $setlData;
            $output .= "<tr>";
            $output .= "<td>".$i["id"]."</td><td>".$setlData."</td><td>" . $p["id"] . "</td><td>". $p["amt"]."</td><td>".$setlData."</td><td>Trx</td>";
            $output .= "</tr>";
            $flag = 2;
            break;
        }
    }

    foreach($invoice as $i){

        if($setlData <= 0 and $flag == 0){

            if($i["amt"] > $p["amt"]){

                $setlData = $i["amt"] - $p["amt"];
                $output .= "<tr>";
                $output .= "<td>".$i["id"]."</td><td>".$i["amt"]."</td><td>" . $p["id"] . "</td><td>". $p["amt"]."</td><td>".$setlData."</td><td>invoice</td>";
                $output .= "</tr>";
                $flag = 1;
                break;
            }

        }

    }

}

$output .= "</tbody></table>";

echo($output);

我确实在网上,谷歌和stackoverflow上进行了全面搜索,但是我无法弄清楚如何将值传递给嵌套循环的下一个数组元素。

请咨询。

0 个答案:

没有答案