首页 > 解决方案 > foreach中foreach计算错误

问题描述

我有两张桌子。其中一个称为“客户”,另一个称为“活期帐户”。

我想要做; 收集客户表中记录的当前帐户表中的借方和贷方列的数据并得出结果。但不知何故,我无法进行正确的计算。我在下面留下我的示例代码。

预先感谢您对我们的支持。

Table Name : Customer                    Table name : Current Account

| tax | company_name                     |tax_no| debt | take
______________________                  _________________________
| 1234| Company One                      |1234  | 9    |
| 5678| Company Second                   |1234  |      | 3
                                         |1234  | 15   |
                                         |5678  | 4    |
                                         |5678  |      | 1

根据上表,我要做的就是根据客户表中的数据,结合当前账户表中的数据,从应收账款中取出欠款,得到结果。

// Data list
$sql = $db->query("SELECT*FROM customer ORDER BY company_name ASC");

$sum_debt = 0;
$sum_take = 0;
foreach($sql->results() as item){

$tax = $item->tax;
$current = $db->query("SELECT*FROM current_account WHERE tax_no = '$tax' ");
foreach($current->results() as $row){
    $sum_debt += $row->debt;
    $sum_take += $row->take;
     
     $res = $sum_take - $sum_debt;
}

}

结果总是错误的。它通过对第一个数据进行正确操作得出结论。它收集下一个数据的第一个结果。

根据表格应得到的结果;公司一是:-24,公司二是-3,但第二个数据是-27。

标签: phpforeach

解决方案


如果 $res 应该包含客户的当前帐户余额,您需要将 $res 的计算移到内部 for 循环之外,并为每个客户重置 sum_debt 和 sum_take:

$sql = $db->query("SELECT*FROM customer ORDER BY company_name ASC");

//for loop for each customer
foreach($sql->results() as item){
    
    $sum_debt = 0; //debt of this customer
    $sum_take = 0; //credit of this customer

    $tax = $item->tax;
    $current = $db->query("SELECT*FROM current_account WHERE tax_no = '$tax' ");
    foreach($current->results() as $row){
        $sum_debt += $row->debt;
        $sum_take += $row->take;
    }
     
    $res = $sum_take - $sum_debt; //account balance of this customer

}

您还可以通过直接计算帐户余额来简化代码:

$sql = $db->query("SELECT*FROM customer ORDER BY company_name ASC");

//for loop for each customer
foreach($sql->results() as item){
    
    $balance_of_this_customer = 0;

    $tax = $item->tax;
    $current = $db->query("SELECT*FROM current_account WHERE tax_no = '$tax' ");
    foreach($current->results() as $row){
        $balance_of_this_customer -= $row->debt;
        $balance_of_this_customer += $row->take;
    }

}

推荐阅读