【问题标题】:For Loop Stops after First IterationFor 循环在第一次迭代后停止
【发布时间】:2020-11-13 22:59:05
【问题描述】:

我在这里有这个 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);
    }

【问题讨论】:

    标签: mysql for-loop php-7.3 laravel-6.2


    【解决方案1】:

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

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

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

    【讨论】:

      最近更新 更多