1, 'date' => '2026-02-01', 'desc' => 'Sale A', 'amount' => 100.00], ['id' => 2, 'date' => '2026-02-02', 'desc' => 'Sale B', 'amount' => 50.00], ['id' => 3, 'date' => '2026-02-03', 'desc' => 'Sale C', 'amount' => 75.00], ['id' => 4, 'date' => '2026-02-04', 'desc' => 'Refund', 'amount' => -25.00], ]; $bankStatement = [ ['id' => 101, 'date' => '2026-02-03', 'desc' => 'POS BATCH 001', 'amount' => 150.00], ['id' => 102, 'date' => '2026-02-04', 'desc' => 'POS BATCH 002', 'amount' => 150.00], ]; // ---------- HANDLE FORM SUBMISSION ---------- $matchesResult = []; $errors = []; if ($_SERVER['REQUEST_METHOD'] === 'POST') { // matches[bank_id][] = ledger_id $matches = isset($_POST['matches']) ? $_POST['matches'] : []; // Index arrays by id for easy lookup $ledgerById = []; foreach ($cashLedger as $l) { $ledgerById[$l['id']] = $l; } $bankById = []; foreach ($bankStatement as $b) { $bankById[$b['id']] = $b; } foreach ($matches as $bankId => $ledgerIds) { if (!isset($bankById[$bankId])) { continue; } $bankRow = $bankById[$bankId]; $sumLedger = 0.0; $selectedLedgerRows = []; foreach ($ledgerIds as $ledgerId) { $ledgerId = (int)$ledgerId; if (!isset($ledgerById[$ledgerId])) { continue; } $row = $ledgerById[$ledgerId]; $sumLedger += $row['amount']; $selectedLedgerRows[] = $row; } $matchesResult[] = [ 'bank' => $bankRow, 'ledger_rows' => $selectedLedgerRows, 'sum_ledger' => $sumLedger, 'is_match' => abs($sumLedger - $bankRow['amount']) < 0.01, ]; } } ?>
Select a bank statement row, then select one or more cash ledger rows that match the same amount.