所以我有以下方法: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