Ich muss ein Array zweimal durchlaufen - einmal um seine Werte zu ändern, und einmal, um seinen Inhalt in HTML anzuzeigen. Leider gerate ich in Schwierigkeiten. Ich habe ein Testszenario erstellt, um das Problem zu veranschaulichen.PHP-Problem mit Schleifen über ein Array zweimal mit foreach und übergeben Wert durch Referenz
$cases = array(
array('caseStyle' => 'case style 1', 'caseNum' => 'case01'),
array('caseStyle' => 'case style 2', 'caseNum' => 'case02'),
array('caseStyle' => 'case style 3', 'caseNum' => 'case03'),
array('caseStyle' => 'case style 4', 'caseNum' => 'case04'),
array('caseStyle' => 'case style 5', 'caseNum' => 'case05'),
array('caseStyle' => 'case style 6', 'caseNum' => 'case06')
);
foreach ($cases as $k => &$v) {
$v['caseNum'] = ucwords($v['caseNum']);
}
foreach ($cases as $k => $v) {
echo $v['caseNum'] . ' - ' . $v['caseStyle'] . '<br/>';
}
Diese Ausgänge:
Case01 - case style 1
Case02 - case style 2
Case03 - case style 3
Case04 - case style 4
Case05 - case style 5
Case05 - case style 5
Beachten Sie die Werte für den letzten Punkt sind falsch.
Wenn während der zweiten Iteration ich foreach($cases as $k => $d)
statt foreach($cases as $k => $v)
oder wenn ich $v
vor der zweiten Iteration unset (unset($v))
geht alles in Ordnung. Das ist faszinierend. Was vermisse ich?
Warum müssen Sie dies in zwei Schleifen tun? Warum nicht beides beim ersten Mal machen? – DiMono
Im eigentlichen Code ist das Array ein sperriges schlechtes Array von Arrays mit Zeilen, die von der Datenbank zurückgegeben werden. In der ersten Iteration räume ich auf, füge Standardwerte für fehlende Werte hinzu, ändere Formate wo nötig und füge zusätzliche Felder hinzu, die aus anderen Tabellen stammen. Die zweite Iteration ist, wenn ich die HTML-Seite mit Werten aus dem Array (das ist Legacy-Code - HTML und PHP alle in einer Datei, keine Vorlagen :() – longwing
Das bedeutet immer noch nicht, dass Sie es nicht tun können Wenn Sie Werte aus dem Array verwenden müssen, bevor Sie sie anzeigen, können Sie die Ausgabe in eine Variable puffern und dann bei Bedarf die Variable ausgeben. Wenn Komplexität ein Problem verursacht, entfernen Sie die Komplexität;) – DiMono