所以我有以下方法:PHP变量不会设置为0
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',以确保您获得您期望的值。 – Luke
感谢您的评论。 '$ total_dr'和'$ total_cr'被汇总为$ total。如果你看,这个值实际上是在我展示的第一幅图像的数组中。你可以看到'$ total'在其中一个位置是'1000',它确实改变了'$ group_dr'的值,这就是想法,但是'$ group_dr'应该在组的开头重置,而不是继续求和,所以在第二组“负债”中,“$ group_dr”应该只是说'1000'。所以我不认为这是问题。不过谢谢 – Juan