У меня есть два массива
$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
после вычета остаток 1500 стоимости счета будет вычтен из второй элемент из платежи массив «amt» который 3000
это будет продолжаться, пока я не достигну последнего оплата элемент массива
Приведенный ниже код — это то, что я написал, и до сих пор он делает одну успешную итерацию, но не может сделать то же самое на второй итерации, поскольку вложенный цикл 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, и я не могу понять, как передать значение в следующий элемент массива вложенного цикла.
Пожалуйста посоветуй.
Задача ещё не решена.
Других решений пока нет …