array_slice($array, $offset, $length) mengembalikan array baru berisi $length elemen mulai dari posisi $offset. Array aslinya tidak berubah. Kalau $length tidak ditulis, semua elemen sampai akhir diambil.
Offset adalah posisi (0 adalah elemen pertama), bukan key. Ini penting untuk array asosiatif dan untuk array yang key-nya bukan 0, 1, 2.
Mengambil N elemen terakhir dengan offset negatif
Offset negatif dihitung dari akhir: -1 adalah elemen terakhir, -3 mulai dari tiga elemen sebelum akhir. Length negatif berhenti sejumlah elemen itu sebelum akhir.
Meminta elemen lebih banyak daripada yang ada tidak masalah: array_slice($log, 0, 100) mengembalikan kelimanya.
Mempertahankan key asli dengan preserve_keys
Key integer dinomori ulang mulai dari 0, kecuali kamu memberikan true sebagai argumen keempat. Key string selalu dipertahankan.
Pakai true saat key-nya punya arti, misalnya id dari database, dan kamu akan mencari elemen berdasarkan key itu nanti.
Membuat pagination array dengan array_slice
Menampilkan halaman $page dari sebuah list dengan $perPage item per halaman cukup dengan satu slice: offset-nya adalah ($page - 1) * $perPage. Contoh ini mencetak list HTML dengan link halaman. Jalankan, lalu klik nomor halaman: script yang sama berjalan lagi dengan $_GET['page'] yang diisi dari link tersebut.
Baris max(1, min($pages, ...)) menjaga ?page=99 atau ?page=-1 yang diketik manual tetap di dalam rentang yang valid. Dengan database, kamu akan meminta satu halaman saja dengan LIMIT dan OFFSET alih-alih memuat semua baris, tetapi untuk list yang sudah ada di memori, array_slice sudah cukup.
array_slice vs array_splice
Namanya hanya beda satu huruf, tetapi efeknya pada array asli berlawanan. array_slice menyalin sebagian isi keluar. array_splice memotong bagian itu dari array yang kamu berikan, menomorinya ulang, dan mengembalikan elemen yang dihapus. Fungsi ini juga bisa menyisipkan pengganti di tempat potongannya.
array_slice | array_splice | |
|---|---|---|
| Mengubah array asli | tidak | ya (lewat referensi) |
| Mengembalikan | bagian yang dipilih | bagian yang dihapus |
| Bisa menyisipkan elemen | tidak | ya, argumen keempat |
| Key integer | dinomori ulang kecuali preserve_keys | dinomori ulang |
Untuk cara lain menghapus elemen, lihat menghapus elemen dari array.
Membagi array menjadi potongan
Saat kamu butuh semua halaman sekaligus, misalnya untuk menyusun produk dalam baris berisi tiga, array_chunk melakukan slice berulang itu untukmu.
Ganti 3 menjadi 2 atau 4, lalu jalankan lagi. Potongan terakhir berisi sisa elemen yang ada.
Pertanyaan yang sering diajukan
Bagaimana cara mengambil N elemen pertama array di PHP?
array_slice($arr, 0, 3) mengembalikan tiga elemen pertama. Kalau array-nya berisi kurang dari tiga, kamu mendapatkan semuanya tanpa error.
Bagaimana cara mengambil N elemen terakhir array?
Pakai offset negatif: array_slice($arr, -3) mengembalikan tiga elemen terakhir. Kalau length tidak ditulis, artinya "sampai akhir".
Apa fungsi preserve_keys di array_slice?
Secara bawaan, array_slice menomori ulang key integer mulai dari 0. Berikan true sebagai argumen keempat, array_slice($arr, 2, 3, true), untuk mempertahankan key integer aslinya. Key string selalu dipertahankan, dengan atau tanpa argumen itu.
Apa bedanya array_slice dan array_splice?
array_slice mengembalikan salinan sebagian array dan tidak menyentuh array aslinya. array_splice menerima array lewat referensi, menghapus bagian itu dari array tersebut (dan bisa menyisipkan penggantinya), lalu mengembalikan bagian yang dihapus.