PHP: вложенные циклы foreach и передаваемые значения - PullRequest
0 голосов
/ 06 ноября 2018

У меня есть два массива

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

Мое намерение состоит в том, чтобы оплатить счет-фактуру"amt" от payment"amt", сценарий будет выполняться упорядоченным образом.

Однако размер двух элементов массива может различаться.

например: 1. invoice Первый элемент массива "amt" 2000 будет вычтен из payment Первый элемент массива "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);

Я выполнил поиск по всей сети, в Google и stackoverflow, и я не могу понять, как передать значение следующему элементу массива вложенного цикла.

Пожалуйста, совет.

...