Ziehen Sie Elemente von next foreach Element in PHP?
Mache ich ein PHP - "Ampel" - Stil-warn-system für meine website, die im Grunde sagt "wenn es X prozentuale Veränderung zwischen dem aktuellen array-Eintrag ist und die nächsten ein, werfen einen Fehler'.
So, ich bin looping durch meine array-Elemente in einer foreach-Schleife, jedoch müssen in der Lage sein, so etwas zu tun: (Hinweis: dies ist nur ein einfaches Beispiel, aber sollte genug sein, um die Idee)
foreach($array as $a)
{
$thisValue = $a['value'];
$nextValue = next($a['value']);
$percentageDiff = ($nextValue-$thisValue)/$thisValue;
}
Habe ich die next () - tags, um den nächsten Wert aber verstehen, das funktioniert nur bei arrays. Gibt es noch etwas, das ich verwenden können, um das nächste foreach item?
Vielen Dank für Ihre Zeit!
- mögliche Duplikate von Peek Voraus bei der Iteration ein array in PHP 5.2
- Vielen Dank für die Antworten - alles schien wirklich großartige Möglichkeiten, dies getan. Ich entschied mich für die Lösung von @Orbling und @ansteckend, Während es verursacht eine sehr moddest overhead, kann ich mit Leben gegeben, wie oft die Funktion aufgerufen wird.
Du musst angemeldet sein, um einen Kommentar abzugeben.
tun es in die andere Richtung, und speichern Sie den vorherigen Eintrag und vergleichen diese.
Einfache Antwort: nicht mit einem
foreach
Schleife. Verwenden Sie einen einfachenfor
loop statt:Sollten Sie in der Lage sein zu verwenden:
Diese kopiert das array und dann bewegt sich der Zeiger entlang durch 1.
Die einfachste Lösung IMO ist Ihre Denkweise ändern. Anstelle der Prüfung der aktuellen und der nächsten Platte, überprüfen Sie die vorherigen und dem aktuellen Datensatz. Die Erinnerung an die vorhergehende, ist einfacher als immer den nächsten.
Wenn Sie das nicht wollen, können Sie auch Graben die
foreach
und Durchlaufen im C-Stil verwendenfor
und eine Zähler-variable - ein cavet aber: der PHP-sparse-arrays können beißen Sie, so dass Sie am besten anrufenarray_values()
auf das zu prüfende array vor der Iteration.Wenn Sie möchten, mit zu arbeiten
foreach
könnten Sie vergleichen den aktuellen Wert mit der vorherigen Wert, anstatt mit dem nächsten Wert:Mit diesem können Sie einfach die Umschalttaste die ganze iteration, um einen Eintrag.
Warum nicht einfach eine normale for-Schleife anstatt der foreach-iterator?
'Es ist in der Regel einfacher zu verwenden, wird der Vorherige Wert als die nächste:
Gibt es in der Tat array iterator Funktionen, die das unterstützen, was Sie brauchen, und auch einfach Schleife durch ein array mit next() /prev() usw. funktioniert einwandfrei, aber die Lösung oben ist eleganter
Es funktioniert nicht mit foreach, weil foreach erstellt eine Kopie von Referenzen und nicht die array-Zeiger in das array selbst.
Hier ist ein Beispiel, das verwendet werden kann für assoziative arrays mit dem array-iterator-Funktionen: