So habe ich die folgende Methode:PHP-Variable in der Schleife nicht auf 0 gesetzt
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;
}
Um eine Vorstellung zu geben, was einige meiner Variablen enthalten oder tun, $groupData
hat 9 Zeilen. $accountData
hat etwa 33 Zeilen
Mein Ziel für jede Iteration von $groupData
ist, die Zeilen in $accountData
finden, die $groupData
passen und dann in ein neues Array die Erkenntnis zugrunde, hängen. Ich bekomme ein Array, das wie folgt aussieht:
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';
)
),
Alles perfekt außer für den kritischen Moment funktioniert, wenn die erste Iteration von $groupData
beendet hat, die $group_dr
und $group_cr
auf 0 gesetzt, um eine neue Iteration für die Vorbereitung nächste Gruppe. Es scheint jedoch nicht auf Null gesetzt zu sein. Und ich am Ende mit auf den Punkt:
Vielleicht noch seltsamer, wenn ich die beiden Variablen am Boden entferne ich mit diesem Ende:
Was mich, wenn die sich fragen Die Variable wird irgendwo anders zwischengespeichert. Aber es ist nicht. Es ist nur ärgerlich, weil die zweite Schleife hat $total_dr
und $total_cr
mit der gleichen Logik und Nullsetzen ohne Problem.
Ich fühle mich wie ich habe übertrieben und habe mehrere Methoden ausprobiert. Wenn irgendjemand bitte erklären könnte, wo ich möglicherweise schief gehe, weil ich weiß, dass ich irgendwo bin. Danke
EDIT:
Ich bin der Bearbeitung, weil es einen anderen Ort, wo $group_dr
und $group_cr
bearbeitet wird, und das ist in:
$total > 0 ? $group_dr += $total : $group_cr +=$total;
Dies sollte jedoch keine Auswirkungen haben, denn dies ist in der zweiten Iteration. Aber ich dachte, ich es darauf hinweisen würde
Fügen Sie Ihrer Ausgabe (oder einem Protokoll) möglicherweise die Werte "$ total_cr" und "$ total_dr" hinzu, um sicherzustellen, dass Sie die Werte erhalten, die Sie dort erwarten. – Luke
Danke für Ihren Kommentar. '$ total_dr' und' $ total_cr' werden in $ total zusammengerollt. Wenn Sie schauen, ist der Wert tatsächlich in dem Array auf dem ersten Bild, das ich zeigte. Sie können sehen, wo '$ total' auf einem von ihnen' 1000' ist und es ändert den Wert von '$ group_dr', das ist die Idee aber' $ group_dr' sollte am Anfang der Gruppe zurückgesetzt werden, nicht weiter summieren In der zweiten Gruppe "Verbindlichkeiten" sollte "$ group_dr" einfach "1000" sagen. Also ich denke nicht, dass das das Problem ist. Trotzdem danke – Juan