Menu

PHP array_slice(): obtener una parte de un array

array_slice($array, $offset, $length) devuelve una copia de una parte de un array sin cambiar el original. Aprende los desplazamientos negativos para los últimos elementos, preserve_keys, la paginación de una lista y en qué se diferencia de array_splice.

Esta página incluye editores ejecutables: edita, ejecuta y ve el resultado al instante.

array_slice($array, $offset, $length) devuelve un array nuevo con $length elementos a partir de la posición $offset. El array original no cambia. Omite $length para tomar todo hasta el final.

El desplazamiento es una posición (0 es el primer elemento), no una clave. Eso importa en los arrays asociativos y en los arrays cuyas claves no son 0, 1, 2.

Obtener los últimos N elementos con un desplazamiento negativo

Un desplazamiento negativo cuenta desde el final: -1 es el último elemento y -3 empieza tres antes del final. Una longitud negativa se detiene esa cantidad de elementos antes del final.

Pedir más elementos de los que existen no es un problema: array_slice($log, 0, 100) devuelve los cinco.

Conservar las claves originales con preserve_keys

Las claves enteras se renumeran desde 0 salvo que pases true como cuarto argumento. Las claves de texto se conservan siempre.

Usa true cuando las claves signifiquen algo, como los ids de una base de datos, y vayas a buscar elementos por ellas más adelante.

Paginar un array con array_slice

Mostrar la página $page de una lista con $perPage elementos por página es un solo slice: el desplazamiento es ($page - 1) * $perPage. Este ejemplo imprime una lista HTML con enlaces a las páginas. Ejecútalo y haz clic en un número de página: el mismo script se ejecuta otra vez con $_GET['page'] tomado del enlace.

La línea max(1, min($pages, ...)) mantiene dentro del rango válido un ?page=99 o un ?page=-1 escrito a mano. Con una base de datos pedirías solo una página con LIMIT y OFFSET en lugar de cargar todas las filas, pero para una lista que ya está en memoria, array_slice hace todo el trabajo.

array_slice vs array_splice

Los nombres se diferencian en una letra y hacen cosas opuestas al original. array_slice copia una parte. array_splice corta esa parte del array que le pasas, lo renumera y devuelve los elementos eliminados. También puede insertar reemplazos donde estaba el corte.

array_slicearray_splice
Cambia el originalnosí (por referencia)
Devuelvela parte seleccionadala parte eliminada
Puede insertar elementosnosí, cuarto argumento
Claves enterasrenumeradas salvo con preserve_keysrenumeradas

Para más formas de borrar elementos, consulta eliminar elementos de un array.

Dividir un array en bloques

Cuando necesitas todas las páginas a la vez, por ejemplo para colocar productos en filas de tres, array_chunk hace los cortes repetidos por ti.

Cambia el 3 por 2 o 4 y vuelve a ejecutarlo. El último bloque contiene lo que sobre.

Preguntas frecuentes

¿Cómo obtengo los primeros N elementos de un array en PHP?

array_slice($arr, 0, 3) devuelve los tres primeros elementos. Si el array tiene menos de tres, los obtienes todos y sin ningún error.

¿Cómo obtengo los últimos N elementos de un array?

Usa un desplazamiento negativo: array_slice($arr, -3) devuelve los tres últimos elementos. Omitir la longitud significa "hasta el final".

¿Qué hace preserve_keys en array_slice?

Por defecto, array_slice renumera las claves enteras desde 0. Pasa true como cuarto argumento, array_slice($arr, 2, 3, true), para conservar las claves enteras originales. Las claves de texto se conservan siempre, con o sin él.

¿Cuál es la diferencia entre array_slice y array_splice?

array_slice devuelve una copia de una parte del array y deja el original intacto. array_splice recibe el array por referencia, le quita esa parte (y opcionalmente inserta reemplazos) y devuelve lo que eliminó.

Ilustración de los lenguajes de programación de Coddy

Aprende a programar con Coddy

COMENZAR