W3docs

Funzione PHP array_slice: una guida completa

Scopri come usare PHP array_slice() per estrarre parte di un array per offset e lunghezza, con indici negativi, preservazione delle chiavi ed esempi pratici.

array_slice() estrae una porzione di un array PHP e la restituisce come nuovo array, lasciando l'originale intatto. È lo strumento giusto ogni volta che hai bisogno di "dammi gli elementi da 5 a 10," i primi o gli ultimi N elementi, oppure una pagina di risultati. Questa guida tratta la firma della funzione, il comportamento degli argomenti $offset, $length e $preserve_keys (inclusi i valori negativi), l'insidia relativa alle chiavi numeriche e diversi pattern pratici.

Cos'è la funzione PHP array_slice?

La funzione array_slice è una funzione PHP integrata che consente di estrarre una porzione di un array, in base a un indice iniziale e a una lunghezza. La sintassi della funzione è la seguente:

Sintassi della funzione PHP array_slice

array array_slice ( array $array , int $offset [, int $length = NULL [, bool $preserve_keys = false ]] )
  • $array — l'array da cui estrarre la porzione. Viene passato per valore, quindi l'array originale non viene mai modificato.
  • $offset — l'indice iniziale della porzione. Se positivo, la porzione inizia da tanti elementi dall'inizio. Se negativo, inizia da tanti elementi dalla fine dell'array (-2 significa "inizia dal penultimo elemento").
  • $length (opzionale) — quanti elementi prendere. Se omesso o null, la porzione arriva fino alla fine dell'array. Se negativo, la porzione si ferma tanti elementi prima della fine. Se maggiore degli elementi rimanenti, si ottiene semplicemente ciò che è rimasto.
  • $preserve_keys (opzionale, predefinito false) — vedi la nota sulla preservazione delle chiavi di seguito.

La funzione restituisce un nuovo array contenente gli elementi selezionati; l'originale rimane intatto.

Offset e lunghezza negativi

I valori negativi contano dalla fine, il che rende banali "gli ultimi N elementi" e "tutto tranne l'ultimo elemento":

PHP array_slice con offset e lunghezza negativi

<?php
$letters = array("a", "b", "c", "d", "e");

print_r(array_slice($letters, -2));    // last 2: Array ( [0] => d [1] => e )
print_r(array_slice($letters, 1, -1)); // skip first and last: Array ( [0] => b [1] => c [2] => d )
?>

Come vengono gestite le chiavi

Per impostazione predefinita array_slice() reindicizza le chiavi numeriche a partire da 0, ma preserva sempre le chiavi string (associative). Imposta il quarto argomento a true quando hai bisogno che le chiavi numeriche originali sopravvivano:

Preservazione delle chiavi con PHP array_slice

<?php
$num = array(10 => "x", 20 => "y", 30 => "z");

print_r(array_slice($num, 1));             // reindexed: Array ( [0] => y [1] => z )
print_r(array_slice($num, 1, null, true)); // kept:      Array ( [20] => y [30] => z )
?>

L'esempio di sintassi precedente mostra $preserve_keys = true combinato con un offset negativo:

PHP array_slice con chiavi preservate e offset negativo

<?php
$assoc = array("a" => 1, "b" => 2, "c" => 3, "d" => 4);
$slice = array_slice($assoc, -2, 2, true);
print_r($slice); // Output: Array ( [c] => 3 [d] => 4 )
?>

Come si usa la funzione PHP array_slice?

Usare la funzione array_slice è molto semplice. Ecco un esempio che dimostra come estrarre una porzione di un array, a partire dal terzo elemento, includendo i due elementi successivi:

Come usare la funzione PHP array_slice

php— editable, runs on the server

Come puoi vedere, la porzione risultante contiene gli elementi "cherry" e "date", che sono i due elementi a partire dal terzo elemento dell'array originale.

Esempi pratici di utilizzo della funzione PHP array_slice

Ora che sai come usare la funzione array_slice, vediamo alcuni esempi pratici del suo utilizzo.

Paginazione dei risultati

Se stai lavorando con un dataset di grandi dimensioni, come un elenco di prodotti o post di blog, potresti voler visualizzare i risultati in modo paginato, per evitare di sovraccaricare l'utente con troppe informazioni contemporaneamente. La funzione array_slice può essere molto utile in questo contesto, poiché consente di estrarre una porzione del dataset in base al numero di pagina corrente e al numero di elementi per pagina. Ecco un esempio che dimostra come farlo:

PHP: paginazione dei risultati con la funzione array_slice

<?php

$dataset = range(1, 100); // Simulated dataset
$page = $_GET["page"] ?? 1; // Default to page 1 if not set
$itemsPerPage = 10;
$startIndex = ($page - 1) * $itemsPerPage;
$slice = array_slice($dataset, $startIndex, $itemsPerPage);

?>

Rimozione di elementi da un array

Se hai un array contenente elementi che vuoi rimuovere, puoi combinare array_slice() con array_merge() per costruire un nuovo array che li escluda. (Se preferisci rimuovere gli elementi in place e modificare l'array originale, usa invece array_splice().) Ecco un esempio:

PHP: usare la funzione array_slice in combinazione con la funzione array_merge

php— editable, runs on the server

Riordinamento degli elementi in un array

Se hai un array contenente elementi che vuoi riordinare, puoi usare la funzione array_slice in combinazione con la funzione array_merge per creare un nuovo array che includa gli elementi nell'ordine desiderato. Ecco un esempio che dimostra come farlo:

PHP: riordinamento degli elementi in un array

php— editable, runs on the server

Come puoi vedere, l'array risultante contiene gli stessi elementi dell'array originale, ma in un ordine diverso.

Conclusione

array_slice() estrae parte di un array senza modificare l'originale, rendendolo ideale per la paginazione, per ottenere i primi o gli ultimi N elementi e per costruire copie riordinate. Ricorda i due comportamenti chiave: $offset/$length negativi contano dalla fine, e le chiavi numeriche vengono reindicizzate a meno che non si passi $preserve_keys = true.

Per approfondire, vedi array_splice() per la rimozione/sostituzione in place, array_merge() per unire nuovamente le porzioni, e la panoramica sugli array PHP per un ripasso su come funzionano gli array e le chiavi.

Esercitati

Pratica
Cosa fa la funzione array_slice() in PHP?
Cosa fa la funzione array_slice() in PHP?
Was this page helpful?