For 循环在第一次迭代后停止

For Loop Stops after First Iteration

我这里有这个 for 循环,由于 $due = 0 的值,它在第一个循环后停止循环。如果 $due 的值不是 0,则循环运行正常并且一切正常——问题是,这个条件必须始终为零。把我的头撞在墙上。有任何想法吗?这是循环:

for ($i = 0; $i < $unpaid->getInvoiceQuantity($customer_id); $i++) {
        $each_invoice_id = $request->input('invoice_id' . $i);

        $whats_due = DB::table('invoices')
                       ->select('due')
                       ->where('id','=', $request->input('invoice_id' . $i))
                       ->first();

        $invoice_payment_total = $request->input('total' . $i);
        $inv_id_array = array('invoice_id' => $request->input('invoice_id' . $i), 'payment_id' => $payment_id,
                              'no_invoice' => false);
        DB::table('payment_applications')->insert($inv_id_array);

        $due = 0;
        if ($whats_due->due == $invoice_payment_total) {
            $due = 0;
        }
        if ($whats_due->due > $invoice_payment_total) {
            $due = $whats_due->due - $invoice_payment_total;
        }

        $update_array = array('due' => $due);
        DB::table('invoices')->where('id', $request->input('invoice_id' . $i))
          ->update($update_array);

        $payment_application_update_array = array('amount' => $request->input('total' . $i));
        DB::table('payment_applications')->where('invoice_id', $request->input('invoice_id' . $i))
                  ->update($payment_application_update_array);
    }

其中一个更新必须是更改发票数量,并使其低于 $i,因此不再满足循环条件。

您应该将值保存在变量中,而不是每次都调用该方法。

$quantity = $unpaid->getInvoiceQuantity($customer_id);
for ($i = 0; $i < $quantity; $i++) {
    // rest of loop
}