array_slice($array, $offset, $length) renvoie un nouveau tableau avec $length éléments à partir de la position $offset. Le tableau d'origine n'est pas modifié. Omettez $length pour tout prendre jusqu'à la fin.
La position est un rang (0 est le premier élément), pas une clé. Cela compte pour les tableaux associatifs et pour les tableaux dont les clés ne sont pas 0, 1, 2.
Obtenir les N derniers éléments avec une position négative
Une position négative compte depuis la fin : -1 est le dernier élément, -3 commence trois éléments avant la fin. Une longueur négative s'arrête autant d'éléments avant la fin.
Demander plus d'éléments qu'il n'en existe ne pose pas de problème : array_slice($log, 0, 100) renvoie les cinq.
Garder les clés d'origine avec preserve_keys
Les clés entières sont renumérotées depuis 0 sauf si vous passez true en quatrième argument. Les clés de type chaîne sont toujours gardées.
Utilisez true quand les clés ont un sens, comme des identifiants de base de données, et que vous chercherez ensuite des éléments par elles.
Paginer un tableau avec array_slice
Afficher la page $page d'une liste avec $perPage éléments par page tient en une découpe : la position vaut ($page - 1) * $perPage. Cet exemple affiche une liste HTML avec des liens de pages. Exécutez-le et cliquez sur un numéro de page : le même script s'exécute à nouveau avec $_GET['page'] défini par le lien.
La ligne max(1, min($pages, ...)) garde un ?page=99 ou ?page=-1 tapé à la main dans la plage valide. Avec une base de données, vous ne demanderiez qu'une page avec LIMIT et OFFSET au lieu de charger toutes les lignes, mais pour une liste déjà en mémoire, array_slice fait tout le travail.
array_slice ou array_splice
Les noms diffèrent d'une lettre et ils font l'inverse l'un de l'autre sur l'original. array_slice copie une partie. array_splice découpe la partie dans le tableau que vous passez, le renumérote et renvoie les éléments retirés. Elle peut aussi insérer des remplacements à l'endroit de la découpe.
array_slice | array_splice | |
|---|---|---|
| Modifie l'original | non | oui (par référence) |
| Renvoie | la partie sélectionnée | la partie retirée |
| Peut insérer des éléments | non | oui, quatrième argument |
| Clés entières | renumérotées sauf avec preserve_keys | renumérotées |
Pour d'autres façons de supprimer des éléments, voir supprimer des éléments d'un tableau.
Découper un tableau en morceaux
Quand vous avez besoin de toutes les pages à la fois, par exemple pour disposer des produits en rangées de trois, array_chunk fait les découpes répétées pour vous.
Remplacez le 3 par 2 ou 4 et relancez. Le dernier morceau contient ce qui reste.
Questions fréquentes
Comment obtenir les N premiers éléments d'un tableau en PHP ?
array_slice($arr, 0, 3) renvoie les trois premiers éléments. Si le tableau en a moins de trois, vous les obtenez tous, sans erreur.
Comment obtenir les N derniers éléments d'un tableau ?
Utilisez une position négative : array_slice($arr, -3) renvoie les trois derniers éléments. Omettre la longueur signifie « jusqu'à la fin ».
À quoi sert preserve_keys dans array_slice ?
Par défaut, array_slice renumérote les clés entières depuis 0. Passez true en quatrième argument, array_slice($arr, 2, 3, true), pour garder les clés entières d'origine. Les clés de type chaîne sont toujours gardées, avec ou sans.
Quelle est la différence entre array_slice et array_splice ?
array_slice renvoie une copie d'une partie du tableau et laisse l'original intact. array_splice prend le tableau par référence, en retire cette partie (en insérant éventuellement des remplacements) et renvoie ce qu'elle a retiré.