массивы — PHP: вложенные циклы foreach и передаваемые значения

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

    $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» из оплата «amt» скрипт выполнит упорядоченно.

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

например:
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);

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

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

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector