Ich schreibe eine foreach
, die nicht am 0. Index beginnt, sondern beginnt am ersten Index meines Arrays. Gibt es eine Möglichkeit, den Startpunkt der Schleife auszugleichen?Wie starte ich eine foreach-Schleife bei einem bestimmten Index in PHP
Antwort
In einer foreach können Sie das nicht tun. Es gibt nur zwei Möglichkeiten, zu bekommen, was Sie wollen:
- ein for-Schleife verwenden und an Position 1
- startet foreach verwenden und so etwas wie if ($ key> 0) verwenden um den eigentlichen Code
Eine Foreach macht, was ihr Name Ihnen sagt. Etwas für jedes Element tun :)
EDIT: OK, eine sehr böse Lösung kam gerade zu meinen Verstand. Versuchen Sie folgendes:
foreach(array_reverse(array_pop(array_reverse($array))) as $key => $value){
...
}
Das würde das Array umkehren, das letzte Element herausspringen und es wieder umkehren. Dann haben Sie ein Element, das das erste Element ausschließt.
Aber ich würde empfehlen, eine der anderen Lösungen zu verwenden. Das Beste wäre das Erste.
Und eine Variante: Sie können array_slice() dafür verwenden:
foreach(array_slice($array, 1, null, true) as $key => $value){
...
}
Aber Sie sollten alle drei Parameter verwenden, um die Schlüssel des Arrays für Ihre foreach-Schleife zu halten:
mit array_slice ist es möglich, dies in einer foreach-Schleife zu tun, aber diese Praxis sollte stark entmutigt und strafbar sein durch das Lesen dieser Art von Code. – Kris
Deshalb habe ich darauf hingewiesen, dass es eine EVIL-Methode ist, das zu tun. Aber ich würde keines der Solutos persönlich benutzen. Ich würde eine if-Anweisung oder eine for-Schleife verwenden. – 2ndkauboy
können Sie verwenden die array_slice
Funktion:
$arr = array(); // your array
foreach(array_slice($arr, 1) as $foo){
// do what ever you want here
}
natürlich können Sie, was Offset-Wert Sie wollen. In diesem Fall "1
" überspringen Sie das erste Element des Arrays.
Nichts wert, dass dies eine Kopie dieses Chunks des Arrays erfordert. Könnte eine schlechte Sache sein, wenn das Array groß ist. –
Sie haben Recht ... das funktioniert besser für kurze Arrays. Vielen Dank für Ihren Kommentar. – Cristian
Scheinen, wie ein for-Schleife wäre der bessere Weg sein, hier zu gehen, aber wenn Sie denken, Sie foreach verwenden, müssen Sie das erste Element aus dem Array verschieben könnten und es auf unshift zurück:
$a = array('foo','bar');
$temp = array_shift($a);
foreach ($a as $k => $v) {
//do something
}
array_unshift($a, $temp);
es
Man beachte nur, dass die Syntax $ k => $ v nur für assoziative Arrays gilt. Für indizierte Arrays möchten Sie nur $ a als $ v. –
@Michael: Das $ k => $ v funktioniert auch für indizierte Arrays und gibt die Indexnummer des aktuellen Wertes zurück. – 2ndkauboy
Oh ... cool! : D lol –
Halt einfach.
foreach ($arr as $k => $v) {
if ($k < 1) continue;
// your code here.
}
Ich mag diese Lösung. Ist es weiterhin mit jeder Version von PHP verfügbar? – 2ndkauboy
http://ie2.php.net/manual/en/control-structures.continue.php erwähnt nicht, wann es verfügbar wurde, also nehme ich an, dass es von Anfang an da war. – TRiG
und, wenn das Array nicht indiziert ist? – Cristian
A Foreach
wird das Array zurück:
Hinweis: Bei foreach ersten Mal ausgeführt wird, der interne Zeiger wird automatisch zurückgesetzt, um das erste Element des Arrays. Das bedeutet, dass Sie vor einer foreach-Schleife reset() nicht aufrufen müssen.
Entweder eine for
Schleife verwenden
$letters = range('a','z');
for($offset=1; $offset < count($letters); $offset++) {
echo $letters[$offset];
}
oder eine while
Schleife (nur wenn dies nicht eine assoziative Array ist)
$letters = range('a','z');
next($letters);
while($letter = each($letters)) {
echo $letter['value'];
}
oder mit einem (kann eine beliebige Anordnung sein) LimitIterator
$letters = new LimitIterator(new ArrayIterator(range('a','z')), 1);
foreach($letters as $letter) {
echo $letter;
}
, mit dem Sie Start Offset und Count durch den Konstruktor angeben können.
des oben Gibt alle Buchstaben b bis z statt a bis z
Nun keinen Körper gesagt, aber wenn Sie nichts dagegen haben, um das Array zu verändern und wenn wir wollen, von dem zweiten Element starten die gegebene Array:
unset($array[key($array)]);
foreach($array as $key=>$value)
{
//do whatever
}
, wenn Sie nichts dagegen haben, fügen Sie einfach,
$saved = $array;
unset($array[key($array)]);
foreach($array as $key=>$value)
{
//do whatever
}
$array = $saved;
Außerdem, wenn Sie einen bestimmten bekannten Index überspringen wollen, subtitute nur
key($array)
von dem angegebenen Index
- 1. Wie starte ich eine foreach-Schleife bei einem bestimmten Index in scala?
- 2. Wie starte ich von einem bestimmten Wert in einem Array?
- 3. Wie starte ich eine Methode nach einem bestimmten Zeitintervall?
- 4. Wie starte ich eine Aktivität nach einem bestimmten Zeitraum?
- 5. Verwenden von .replace() bei einem bestimmten Index
- 6. mysql: Wie starte ich automatisches Inkrement von einem bestimmten Punkt?
- 7. Wie starte ich php-fpm in einem Andock-Container neu?
- 8. PHP-Trim-String bei einem bestimmten Zeichen
- 9. PHP & MySQL - Wann starte ich eine Website
- 10. Wie starte ich eine QApplication?
- 11. Wie man eine Reihe bei einem bestimmten Index in Titan hinzufügt
- 12. Ersetzen Sie alle 1 bei einem bestimmten Index - numpy
- 13. Wie starte ich eine Aktivität in einem Tab?
- 14. Wie starte ich eine Anwendung von einem Kontakt in Android?
- 15. Wie starte ich einen Prozess von PHP
- 16. PHP: Wie starte ich einen gelösten Prozess?
- 17. Wie findet man das Zeichen bei einem bestimmten Index innerhalb einer bestimmten Zelle?
- 18. Wie starte ich BouncyCastle?
- 19. Wie starte ich eine neue HTML-Zeile von PHP?
- 20. Wie starte ich ein Skript an einem bestimmten Punkt in Powershell?
- 21. std :: deque: Wie bekomme ich einen Iterator, der auf das Element bei einem bestimmten Index zeigt?
- 22. Wie starte ich eine Anwendung in C#?
- 23. Wie starte ich eine VM in azurblau?
- 24. Entfernen char bei bestimmten Index - Python
- 25. Swap divs Position bei bestimmten Index
- 26. Wert aus Array bei Index (PHP)
- 27. Wie finde ich den nächsten Index zu einem bestimmten Index in Matlab?
- 28. Wie trim eine Zeichenfolge nach einem bestimmten Zeichen in PHP
- 29. Wie starte ich einen EJB-Timer bei der Bereitstellung?
- 30. Wie bekomme ich eine Instanz einer bestimmten Klasse in PHP?
Wäre es nicht besser, wenn Sie sich für stattdessen verwenden? – Prix
Die Handhabung der Schlüssel-Wert-Paare ist in einer foreach-Schleife viel einfacher und ich denke, das ist die Resaon, die er für eine foreach nehmen wollte. Oder er hat sogar eine Foreach und möchte nicht viel Code ändern. – 2ndkauboy