array_slice($array, $offset, $length) restituisce un nuovo array con $length elementi a partire dalla posizione $offset. L'array originale non viene modificato. Ometti $length per prendere tutto fino alla fine.
L'offset è una posizione (0 è il primo elemento), non una chiave. Questo conta per gli array associativi e per gli array le cui chiavi non sono 0, 1, 2.
Gli ultimi N elementi con un offset negativo
Un offset negativo conta dalla fine: -1 è l'ultimo elemento, -3 parte da tre elementi prima della fine. Una lunghezza negativa si ferma quel numero di elementi prima della fine.
Chiedere più elementi di quanti ne esistano va bene: array_slice($log, 0, 100) li restituisce tutti e cinque.
Mantenere le chiavi originali con preserve_keys
Le chiavi intere vengono rinumerate da 0 a meno che tu non passi true come quarto argomento. Le chiavi stringa vengono sempre mantenute.
Usa true quando le chiavi hanno un significato, come gli id di un database, e dopo cercherai gli elementi tramite esse.
Paginare un array con array_slice
Mostrare la pagina $page di una lista con $perPage elementi per pagina è una sola slice: l'offset è ($page - 1) * $perPage. Questo esempio stampa una lista HTML con i link alle pagine. Eseguilo e clicca un numero di pagina: lo stesso script viene eseguito di nuovo con $_GET['page'] preso dal link.
La riga max(1, min($pages, ...)) tiene dentro l'intervallo valido un ?page=99 o ?page=-1 scritto a mano. Con un database chiederesti una sola pagina con LIMIT e OFFSET invece di caricare tutte le righe, ma per una lista già in memoria array_slice fa tutto il lavoro.
array_slice vs array_splice
I nomi differiscono di una lettera e fanno cose opposte all'originale. array_slice copia fuori una parte. array_splice taglia la parte dall'array che passi, lo rinumera e restituisce gli elementi rimossi. Può anche inserire dei sostituti dove c'era il taglio.
array_slice | array_splice | |
|---|---|---|
| Modifica l'originale | no | sì (per riferimento) |
| Restituisce | la parte selezionata | la parte rimossa |
| Può inserire elementi | no | sì, quarto argomento |
| Chiavi intere | rinumerate salvo preserve_keys | rinumerate |
Per altri modi di eliminare elementi, vedi rimuovere elementi da un array.
Dividere un array in blocchi
Quando ti servono tutte le pagine insieme, per esempio per disporre i prodotti in righe da tre, array_chunk fa le slice ripetute per te.
Cambia il 3 in 2 o 4 ed eseguilo di nuovo. L'ultimo blocco contiene ciò che avanza.
Domande frequenti
Come ottengo i primi N elementi di un array in PHP?
array_slice($arr, 0, 3) restituisce i primi tre elementi. Se l'array ne ha meno di tre, li ottieni tutti senza errori.
Come ottengo gli ultimi N elementi di un array?
Usa un offset negativo: array_slice($arr, -3) restituisce gli ultimi tre elementi. Omettere la lunghezza significa "fino alla fine".
A cosa serve preserve_keys in array_slice?
Di default array_slice rinumera le chiavi intere da 0. Passa true come quarto argomento, array_slice($arr, 2, 3, true), per mantenere le chiavi intere originali. Le chiavi stringa vengono sempre mantenute, con o senza.
Qual è la differenza tra array_slice e array_splice?
array_slice restituisce una copia di una parte dell'array e lascia intatto l'originale. array_splice riceve l'array per riferimento, ne rimuove quella parte (inserendo eventualmente dei sostituti) e restituisce ciò che ha rimosso.