Menu

array_slice() w PHP: pobieranie fragmentu tablicy

array_slice($array, $offset, $length) zwraca kopię fragmentu tablicy bez zmiany oryginału. Poznaj ujemne offsety dla ostatnich elementów, preserve_keys, stronicowanie listy i różnicę względem array_splice.

Na tej stronie są działające edytory: edytuj, uruchamiaj i od razu zobacz wynik.

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_slicearray_splice
Zmienia oryginałnietak (przez referencję)
Zwracawybrany fragmentusunięty fragment
Może wstawiać elementynietak, czwarty argument
Klucze całkowitenumerowane od nowa, chyba że preserve_keysnumerowane 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.

Ilustracja języków programowania w Coddy

Ucz się programowania z Coddy

ZACZNIJ