【发布时间】:2017-03-06 22:38:47
【问题描述】:
所以我有以下方法:
public function generateTrialBalance( $period ) {
$total_dr = 0;
$total_cr = 0;
$date = NULL;
$group_dr = 0;
$group_cr = 0;
$accountData = $this->find();
$groupData = $this->findAllGroups();
foreach( $groupData as $accountGroup ) {
foreach( $accountData as $ledger ) {
$group = $this->findGroup( $ledger['group_id'] );
$ledgerFormat = gl_format( $ledger['gl_account_main'], $ledger['gl_account_dept'], $ledger['gl_account_sub']);
$ledgerEntries = $this->findLedgerEntries( $ledger['id'] );
foreach( $ledgerEntries as $entries ) {
$journalData = $this->findJournalEntry( $entries['entry_id'] );
$date = date( 'm', $journalData['date'] );
if ( $date <= $period ) {
$position = $entries['position'];
$amount = $entries['amount'];
$position == "D" ? $total_dr += $amount : $total_cr += $amount;
}
}
$total = $total_dr - $total_cr;
$total > 0 ? $group_dr += $total : $group_cr +=$total;
if( $accountGroup['id'] == $group['id']) {
$this->ledgerTable[$group['name']][] = array(
"account" => $ledgerFormat,
"description" => $ledger['name'],
"total" => $total,
"group_dr" => $group_dr,
"group_cr" => $group_cr,
);
}
$total_dr = 0;
$total_cr = 0;
}
$group_dr = 0; // Here is where the issue needs resolving
$group_cr = 0; // Resetting the variables to prepare for next iter
}
return $this->ledgerTable;
}
为了了解我的一些变量包含什么或做什么,$groupData 有 9 行。 $accountData 大约有 33 行
我的目标是对于$groupData 的每次迭代,在$accountData 中找到与$groupData 匹配的行,然后根据发现附加到一个新数组中。我得到一个如下所示的数组:
array(
"Group1" => array(
array(
"account" => 'string';
"description" => 'string';
"total" => 'float';
"group_dr" => 'float';
"group_cr" => 'float';
),
array(
"account" => 'string';
"description" => 'string';
"total" => 'float';
"group_dr" => 'float';
"group_cr" => 'float';
)
),
"Group2" => array(
array(
"account" => 'string';
"description" => 'string';
"total" => 'float';
"group_dr" => 'float';
"group_cr" => 'float';
),
array(
"account" => 'string';
"description" => 'string';
"total" => 'float';
"group_dr" => 'float';
"group_cr" => 'float';
)
),
除了$groupData的第一次迭代已经完成的关键时刻,一切都完美无缺,$group_dr和$group_cr设置为0,以便为下一组准备新的迭代。但是,它似乎没有设置为零。我最终得到了这个:
也许更奇怪的是,如果我删除底部的两个变量,我最终会得到这个:
这让我想知道变量是否被缓存在其他地方。但事实并非如此。这只是令人不安,因为第二个循环有$total_dr 和$total_cr 具有完全相同的逻辑并且没有问题地重置为零。
我觉得自己想多了,尝试了几种方法。如果有人可以请解释我可能出错的地方,因为我知道我在某个地方。谢谢
编辑:
我正在编辑,因为还有另一个地方正在编辑 $group_dr 和 $group_cr,那就是:
$total > 0 ? $group_dr += $total : $group_cr +=$total;
但这不应该有效果,因为这是在第二次迭代中。但我想我会指出来
【问题讨论】:
-
也许将
$total_cr和$total_dr添加到您的输出(或日志)中,以确保您获得您期望的值。 -
感谢您的评论。
$total_dr和$total_cr汇总为 $total。如果你看,这个值实际上在我展示的第一张图片的数组中。你可以看到$total在其中一个上是1000,它确实改变了$group_dr的值,这就是想法,但$group_dr应该在组的开头重置,而不是继续求和,所以在第二组liabilities,$group_dr应该说1000。所以我认为这不是问题。不过谢谢