【问题标题】:PHP/MySQL Multidimensional/Associative Arrays 3 Trial BalancePHP/MySQL 多维/关联数组 3 试算平衡
【发布时间】:2014-06-04 13:15:48
【问题描述】:

我目前正在编写一个会计代码,该代码将根据存储在 MySql 中的数据打印出试算表。我似乎无法理解应该正确显示试算表的数组。数据集看起来有点像这样:

标识 |帐户    |金额    |支付方式   
1     学费           5000             支票
2     学费          2000               现金  
3      维修             500               现金  

试算表的输出应以复式格式显示,如下所示:

帐户    |借方   |信用   
银行                  5000
现金                  2000             500
学费                              7000   
维修                                                                                                                                                                                                                          维修

请注意以上两个帐户(银行和现金)必须由代码自动生成,具体取决于 paymode 字段...并且它们的值(在本例中为 5000 和 2000)也取决于在“金额”列。

所以到目前为止,我当前的代码如下所示:(它输出帐户的总数,但仅在借方方面)

// Make the query(Get Accounts and Totals):
$rein = @mysqli_query ($con, "SELECT account, amount, paymode FROM tbl_finance"); // Run the query.

$bg = '#eeeeee';
$accarr = array();
while($rowin = mysqli_fetch_array($rein, MYSQLI_ASSOC)) {
    if(!isset($accarr[$rowin['type']])) {
    $accarr[$rowin['type']]['amount'] = 0;
}
$sum = $rowin['amount_paid'];
$accarr[$rowin['type']]['amount'] += $sum;
$accarr[$rowin['type']]['paymode'] = $rowin['payterm'];
} // End While
mysqli_free_result($rein);
print_r($accarr);

echo '
<table>
<tr>
    <td align="left"><b>ACCOUNT</b></td>
    <td align="right"><b>DEBIT</b></td>
    <td align="right"><b>CREDIT</b></td>
</tr>
';

$bg = '#eeeeee';
foreach($accarr as $acc => $data) {
$bg = ($bg=='#eeeeee' ? '#ffffff' : '#eeeeee');

echo '
<tr bgcolor="'. $bg .'">
    <td align="left">'. $acc .'</td>
        <td align="right">'. $data['amount'] .'</td>
</tr>
';
} // End foreach

echo '</table>';

编辑:上述语句的当前输出:

帐户    |借方   |信用   
学费               7000   
维修                                                                                                                                                                                                                          维修

问题:如何使用上述数据集输出如上所示的数据(在适当的情况下与借方和贷方对齐)?

提前致谢

【问题讨论】:

  • 您能否也粘贴您现在获得的当前输出?此外,我们如何知道特定帐户是 debit 还是 credit
  • 在此处查看粘贴代码的指南
  • @cheezburger,我是否应该添加另一列明确指出是 Dr 还是 Cr?如果是这样(假设存在这样的列)代码会是什么样子?
  • @Brian 是的,我认为您的表格需要另一列来指出哪个帐户是借记的,哪个是贷记的。假设它存在,我会尝试编写代码。

标签: php mysql multidimensional-array associative-array


【解决方案1】:

好的(我应该在这些帐户讲座中更加专注)。现在我不知道一个帐户(银行和现金除外)是否可以同时进行借记和贷记,但是由于您的示例条目没有表明,我猜它没有。此外,下面的代码假设(如上面的注释中所示)您有一个列(我将其命名为 transaction),它说明它是 Dr 还是 Cr 条目。

//this array will hold bank and cash values
$main_acc=array('bank'=>array('Dr'=>0,'Cr'=>0), 'cash'=>array('Dr'=>0,'Cr'=>0));

//this one to hold other accounts and their amounts, transaction etc.
$acc = array();
while($rowin = mysqli_fetch_array($rein, MYSQLI_ASSOC)) {
    /* store bank transaction type and amount */
    if($rowin['paymode']=='Cheque'){
        $main_acc['bank'][$rowin['transaction']] =$main_acc['bank'][$rowin['transaction']] + $rowin['amount'];
    }
    /* store cash transaction type and amount */
    if($rowin['paymode']=='Cash'){
        $main_acc['cash'][$rowin['transaction']] = $main_acc['cash'][$rowin['transaction']] + $rowin['amount'];
    }
    /* store other account transaction type and increment
       amount if already exists */
    if(isset($acc[$rowin['account']])){
        $acc[$rowin['account']]['amount'] = $acc[$rowin['account']]['amount'] +$rowin['amount'];
    }
    else
    {
        $acc[$rowin['account']]['trans'] = $rowin['transaction'];
        $acc[$rowin['account']]['amount'] = $rowin['amount'];

    }

}

echo '
<table>
<tr>
    <td align="left"><b>ACCOUNT</b></td>
    <td align="right"><b>DEBIT</b></td>
    <td align="right"><b>CREDIT</b></td>
</tr>
';

$bg = '#eeeeee';
//displaying bank and cash
foreach($main_acc as $key=>$val){

            $bg = ($bg=='#eeeeee') ? '#ffffff' : '#eeeeee';
            echo '<tr bgcolor="'. $bg .'">
                    <td align="left">'. $key .'</td>
                    <td align="left">'. (($val['Cr']!=0)?$val['Cr']:'') .'</td>
                    <td align="right">'. (($val['Dr']!=0)?$val['Dr']:'').'</td>
                  </tr>
        ';
}

//displaying other accounts
foreach($acc as $key=>$val){

            $bg = ($bg=='#eeeeee') ? '#ffffff' : '#eeeeee';
            echo '<tr bgcolor="'. $bg .'">
                    <td align="left">'. $key .'</td>
                    <td align="left">'. (($val['trans']=='Dr')?$val['amount']:'') .'</td>
                    <td align="right">'. (($val['trans']=='Cr')?$val['amount']:'') .'</td>
                  </tr>
        ';
}
echo '</table>';

输出:

ACCOUNT DEBIT   CREDIT
bank    5000    
cash    2000      500
TUITION          7000
Repairs 500

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-07
  • 2013-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多