array_slice($array, $offset, $length) liefert ein neues Array mit $length Elementen ab Position $offset. Das ursprüngliche Array wird nicht verändert. Lass $length weg, um alles bis zum Ende zu nehmen.
Der Offset ist eine Position (0 ist das erste Element), kein Schlüssel. Das spielt bei assoziativen Arrays eine Rolle und bei Arrays, deren Schlüssel nicht 0, 1, 2 sind.
Die letzten N Elemente mit einem negativen Offset
Ein negativer Offset zählt vom Ende: -1 ist das letzte Element, -3 beginnt drei vor dem Ende. Eine negative Länge hört so viele Elemente vor dem Ende auf.
Mehr Elemente anzufordern, als es gibt, ist kein Problem: array_slice($log, 0, 100) liefert alle fünf.
Die ursprünglichen Schlüssel mit preserve_keys behalten
Ganzzahl-Schlüssel werden ab 0 neu nummeriert, außer du übergibst true als viertes Argument. String-Schlüssel bleiben immer erhalten.
Verwende true, wenn die Schlüssel eine Bedeutung haben, etwa Datenbank-IDs, und du Elemente später darüber nachschlagen wirst.
Ein Array mit array_slice auf Seiten aufteilen
Seite $page einer Liste mit $perPage Einträgen pro Seite anzuzeigen, ist ein einziger Slice: Der Offset ist ($page - 1) * $perPage. Dieses Beispiel gibt eine HTML-Liste mit Seitenlinks aus. Führe es aus und klicke auf eine Seitennummer: Dasselbe Skript läuft erneut, mit $_GET['page'] aus dem Link.
Die Zeile mit max(1, min($pages, ...)) hält ein von Hand getipptes ?page=99 oder ?page=-1 im gültigen Bereich. Mit einer Datenbank würdest du mit LIMIT und OFFSET nur eine Seite abfragen, statt jede Zeile zu laden, aber für eine Liste, die schon im Speicher liegt, erledigt array_slice die ganze Arbeit.
array_slice vs array_splice
Die Namen unterscheiden sich um einen Buchstaben, und sie machen mit dem Original das Gegenteil. array_slice kopiert einen Teil heraus. array_splice schneidet den Teil aus dem übergebenen Array heraus, nummeriert es neu und liefert die entfernten Elemente. Es kann an der Schnittstelle auch Ersatz einfügen.
array_slice | array_splice | |
|---|---|---|
| Ändert das Original | nein | ja (per Referenz) |
| Liefert | den ausgewählten Teil | den entfernten Teil |
| Kann Elemente einfügen | nein | ja, viertes Argument |
| Ganzzahl-Schlüssel | neu nummeriert, außer preserve_keys | neu nummeriert |
Weitere Wege, Elemente zu löschen, findest du unter Elemente aus einem Array entfernen.
Ein Array in Stücke aufteilen
Wenn du alle Seiten auf einmal brauchst, zum Beispiel um Produkte in Dreierreihen anzuordnen, erledigt array_chunk das wiederholte Slicen für dich.
Ändere die 3 in 2 oder 4 und führe den Code erneut aus. Das letzte Stück enthält, was übrig bleibt.
Häufig gestellte Fragen
Wie bekomme ich in PHP die ersten N Elemente eines Arrays?
array_slice($arr, 0, 3) liefert die ersten drei Elemente. Hat das Array weniger als drei, bekommst du alle und keinen Fehler.
Wie bekomme ich die letzten N Elemente eines Arrays?
Mit einem negativen Offset: array_slice($arr, -3) liefert die letzten drei Elemente. Ohne Länge heißt es „bis zum Ende“.
Was macht preserve_keys in array_slice?
Standardmäßig nummeriert array_slice Ganzzahl-Schlüssel ab 0 neu. Übergib true als viertes Argument, array_slice($arr, 2, 3, true), um die ursprünglichen Ganzzahl-Schlüssel zu behalten. String-Schlüssel bleiben immer erhalten, mit oder ohne das Argument.
Was ist der Unterschied zwischen array_slice und array_splice?
array_slice liefert eine Kopie eines Teils des Arrays und lässt das Original in Ruhe. array_splice nimmt das Array per Referenz, entfernt diesen Teil daraus (und fügt optional Ersatz ein) und liefert das Entfernte zurück.