array_slice($array, $offset, $length) zwraca nową tablicę z $length elementami, zaczynając od pozycji $offset. Oryginalna tablica się nie zmienia. Pomiń $length, aby wziąć wszystko do końca.
Offset to pozycja (0 to pierwszy element), a nie klucz. Ma to znaczenie przy tablicach asocjacyjnych i tablicach, których klucze nie są 0, 1, 2.
Ostatnie N elementów przez ujemny offset
Ujemny offset liczy od końca: -1 to ostatni element, -3 zaczyna trzy od końca. Ujemna długość zatrzymuje się tyle elementów przed końcem.
Prośba o więcej elementów, niż istnieje, nie jest problemem: array_slice($log, 0, 100) zwraca wszystkie pięć.
Zachowanie oryginalnych kluczy przez preserve_keys
Klucze całkowite są numerowane od 0, chyba że przekażesz true jako czwarty argument. Klucze tekstowe są zawsze zachowywane.
Używaj true, gdy klucze coś znaczą, na przykład są identyfikatorami z bazy danych, i będziesz później po nich wyszukiwać elementy.
Stronicowanie tablicy przez array_slice
Pokazanie strony $page listy z $perPage elementami na stronę to jeden wycinek: offset wynosi ($page - 1) * $perPage. Ten przykład wypisuje listę HTML z linkami do stron. Uruchom go i kliknij numer strony: ten sam skrypt uruchomi się ponownie z $_GET['page'] ustawionym z linku.
Linia max(1, min($pages, ...)) utrzymuje ręcznie wpisane ?page=99 albo ?page=-1 w poprawnym zakresie. Przy bazie danych poprosiłbyś tylko o jedną stronę przez LIMIT i OFFSET zamiast ładować każdy wiersz, ale dla listy już w pamięci array_slice załatwia całą sprawę.
array_slice vs array_splice
Nazwy różnią się jedną literą, a robią z oryginałem przeciwne rzeczy. array_slice kopiuje fragment. array_splice wycina fragment z przekazanej tablicy, numeruje ją od nowa i zwraca usunięte elementy. Może też wstawić zamienniki w miejscu cięcia.
array_slice | array_splice | |
|---|---|---|
| Zmienia oryginał | nie | tak (przez referencję) |
| Zwraca | wybrany fragment | usunięty fragment |
| Może wstawiać elementy | nie | tak, czwarty argument |
| Klucze całkowite | numerowane od nowa, chyba że preserve_keys | numerowane od nowa |
Więcej sposobów usuwania elementów znajdziesz na stronie o usuwaniu elementów z tablicy.
Dzielenie tablicy na kawałki
Gdy potrzebujesz od razu wszystkich stron, na przykład aby ułożyć produkty w wierszach po trzy, array_chunk wykonuje powtarzane wycinanie za ciebie.
Zmień 3 na 2 albo 4 i uruchom ponownie. Ostatni kawałek zawiera to, co zostało.
Najczęściej zadawane pytania
Jak pobrać pierwsze N elementów tablicy w PHP?
array_slice($arr, 0, 3) zwraca pierwsze trzy elementy. Jeśli tablica ma mniej niż trzy, dostajesz wszystkie i żadnego błędu.
Jak pobrać ostatnie N elementów tablicy?
Użyj ujemnego offsetu: array_slice($arr, -3) zwraca ostatnie trzy elementy. Pominięcie długości oznacza „do końca”.
Co robi preserve_keys w array_slice?
Domyślnie array_slice numeruje klucze całkowite od 0. Przekaż true jako czwarty argument, array_slice($arr, 2, 3, true), aby zachować oryginalne klucze całkowite. Klucze tekstowe są zachowywane zawsze, z nim czy bez niego.
Czym różni się array_slice od array_splice?
array_slice zwraca kopię fragmentu tablicy i nie rusza oryginału. array_splice przyjmuje tablicę przez referencję, wycina z niej ten fragment (opcjonalnie wstawiając zamienniki) i zwraca to, co usunęło.