Il Potere della Funzione array_chunk di PHP
PHP offre una vasta raccolta di funzioni integrate. array_chunk suddivide un array in parti più piccole, utile per paginazione e batch.
PHP dispone di un'ampia raccolta di funzioni integrate per gli array, e array_chunk() è una delle più utili per lavorare con grandi insiemi di dati. Divide un singolo array in una serie di array più piccoli ("blocchi") di dimensione fissa, rendendo i dati più facili da paginare, elaborare in batch e disporre. Questo capitolo spiega la sintassi, illustra esempi eseguibili, tratta il flag preserve_keys e segnala le insidie più comuni.
Cos'è la Funzione array_chunk?
La funzione array_chunk() divide un array in array più piccoli, ognuno contenente un numero specificato di elementi. È utile ogni volta che è necessario suddividere un lungo elenco in gruppi di dimensioni uguali — ad esempio, per visualizzare una griglia di N colonne, elaborare record in batch o costruire output paginato.
Sintassi
array_chunk(array $array, int $length, bool $preserve_keys = false): array| Parametro | Descrizione |
|---|---|
$array | L'array da dividere. |
$length | La dimensione di ogni blocco. Deve essere 1 o maggiore, altrimenti array_chunk() lancia un ValueError (PHP 8+) / emette un avviso (PHP 7). |
$preserve_keys | Opzionale. false (predefinito) reindicizza ogni blocco a partire da 0; true mantiene le chiavi originali. |
Valore restituito: un nuovo array multidimensionale. L'array originale non viene mai modificato — array_chunk() non opera in-place.
Come Funziona array_chunk?
array_chunk() scorre l'array di input nell'ordine e copia gli elementi in un nuovo sotto-array finché non raggiunge $length elementi, poi inizia un nuovo blocco. L'ultimo blocco contiene gli elementi rimanenti, quindi può essere più piccolo degli altri.
Per impostazione predefinita il terzo parametro, preserve_keys, è false, il che reindicizza le chiavi in ogni blocco a partire da 0. Impostarlo su true mantiene le chiavi originali dell'array — importante quando quelle chiavi hanno un significato (come chiavi string o ID non sequenziali).
Ad esempio, considera il seguente array:
PHP define an array
Se chiamiamo array_chunk su questo array, passando 3 come secondo argomento, otteniamo il seguente risultato:
Array
(
[0] => Array
(
[0] => a
[1] => b
[2] => c
)
[1] => Array
(
[0] => d
[1] => e
[2] => f
)
[2] => Array
(
[0] => g
)
)Come si può vedere, l'array originale è stato diviso in tre array più piccoli, ognuno contenente tre elementi (ad eccezione dell'ultimo array, che ne contiene solo uno).
Preservare le Chiavi Originali
Per impostazione predefinita, ogni blocco viene reindicizzato a partire da 0. Passa true come terzo argomento per mantenere invece le chiavi originali:
<?php
$data = array("id10" => "a", "id20" => "b", "id30" => "c");
print_r(array_chunk($data, 2, true));
?>Output:
Array
(
[0] => Array
(
[id10] => a
[id20] => b
)
[1] => Array
(
[id30] => c
)
)Mantieni preserve_keys impostato su true ogni volta che le chiavi identificano i dati (chiavi string, ID del database, ecc.); altrimenti vengono perse alla successiva reindicizzazione.
Perché Usare array_chunk?
La funzione array_chunk è estremamente utile per una varietà di applicazioni, tra cui:
- Suddivisione di grandi array in parti più piccole e gestibili per l'elaborazione.
- Visualizzazione di grandi quantità di dati in modo paginato (ad esempio, suddivisione di un array di risultati in array più piccoli da mostrare su più pagine).
- Miglioramento delle prestazioni degli algoritmi che operano su array riducendo la dimensione degli array elaborati in un dato momento.
Esempio d'Uso: Paginazione
Uno degli usi più comuni della funzione array_chunk è la paginazione. Considera il seguente esempio, in cui abbiamo un array di 12 risultati che vogliamo visualizzare su 2 pagine:
Example of php array_chunk function
array_chunk() divide i 12 risultati in 2 pagine: il primo blocco contiene 10 elementi e il secondo contiene i restanti 2. Ogni blocco corrisponde direttamente a una pagina, quindi puoi visualizzare $pages[0] per la pagina 1, $pages[1] per la pagina 2, e usare count($pages) per costruire i link di paginazione.
Insidie Comuni
$lengthdeve essere almeno 1. Un valore0o negativo lancia unValueErrorin PHP 8 e generava un avviso in PHP 7.- L'array originale non viene modificato.
array_chunk()restituisce un nuovo array; assegna il risultato, non aspettarti che modifichi l'input. - L'ordine è preservato, le chiavi no (per impostazione predefinita). Gli elementi rimangono nell'ordine originale, ma le chiavi numeriche vengono reimpostate a
0..na meno che non si passipreserve_keys = true. - L'ultimo blocco può essere più corto. Gestisci sempre un blocco finale più piccolo di
$lengthquando esegui un ciclo.
Funzioni Correlate
- array_slice() — estrae una singola porzione contigua di un array invece di dividere l'intero array.
- array_splice() — rimuove o sostituisce una porzione di un array in-place.
- array_merge() — combina più array in uno solo.
- array_map() — applica una callback a ogni blocco dopo la suddivisione.
- PHP Arrays — un ripasso sugli array indicizzati e associativi.
Conclusione
La funzione array_chunk() è un modo semplice ed efficace per dividere un grande array in parti più piccole di dimensioni uguali. Che tu stia paginando risultati, elaborando record in batch o disponendo una griglia, mantiene la gestione degli array leggibile e prevedibile. Ricorda le due regole che creano problemi: la dimensione del blocco deve essere almeno 1, e le chiavi vengono reindicizzate a meno che tu non chieda di preservarle.