Pezzo di matrice
Usando array chunk (array_chunk) possiamo facilmente dividere un array in un array multidimensionale (un array di array).
La funzione di blocco dell’array potrebbe essere utilizzata per suddividere un array in parti più piccole, forse per semplificarne l’elaborazione.
Esempio di base
Supponendo di impostare un array come nell’esempio di codice seguente ($arraysulla riga 1), possiamo suddividere questo array in un nuovo array multidimensionale usando la array_chunkfunzione sulla riga 9.
L’esecuzione di questo codice risulterebbe nella matrice multidimensionale alla riga 15.
$array = [
'Post 0',
'Post 1',
'Post 2',
'Post 3',
'Post 4',
'Post 5',
];
$chunked_array = array_chunk( $array, 2 );
print_r( $chunked_array ); // Output the new array.
/**
* Output:
*
* Array
* (* [0] => Array
* (* [0] => Post 0
* [1] => Post 1
*) * [1] => Array
* (* [0] => Post 2
* [1] => Post 3
*) * [2] => Array
* (* [0] => Post 4
* [1] => Post 5
*) *)
**/
Composizione
$chunked_array = array_chunk( $array, $chunk, $preserve_keys );
La array_chunkfunzione accetta tre parametri, $arraye $chunk( $preserve_keysfacoltativo, false per impostazione predefinita). Questi sono i seguenti:
- Il
$arrayparametro accetta un array ed è l’array iniziale che desideriamo trasformare. - Accetta un numero
$chunkintero ed è il numero che usiamo per dividere$arrayin parti di questo valore. - Il parametro facoltativo
$preserve_keysaccetta un valore booleano e manterrà le chiavi dell’array setrue.
Caratteristiche ed esempi specifici
Conserva le chiavi
Esplorando il $preserve_keysparametro, il nostro esempio precedente avvia l’indice di ogni array nidificato a 0. Tuttavia, se dovessimo passare truea questo parametro, l’indice originale dell’array iniziale verrebbe mantenuto intatto:
$array = [
'Post 0',
'Post 1',
'Post 2',
'Post 3',
'Post 4',
'Post 5',
];
$chunked_array = array_chunk( $array, 2, true );
print_r( $chunked_array ); // Output the new array.
/**
* Output:
*
* Array
* (* [0] => Array
* (* [0] => Post 0
* [1] => Post 1
*) * [1] => Array
* (* [2] => Post 2
* [3] => Post 3
*) * [2] => Array
* (* [4] => Post 4
* [5] => Post 5
*) *)
**/
Nell’output le chiavi sono ora sequenziali, come sarebbero nell’array originale (0, 1, 2, 3…).
Conserva le chiavi quando l’array originale ha chiavi con nome
Se il nostro array originale ha chiavi con nome, possiamo conservare le chiavi per mantenerle nel nostro array a blocchi.
L’esempio seguente si diverte un po’ con questo. Diciamo che in qualche modo abbiamo ottenuto un array con alcuni ID post e nomi di post mescolati insieme.
Potremmo usare array_chunkcon il $preserve_keysparametro impostato su trueper dividerli nei singoli post.
$array = [
'id_0' => '10',
'name_0' => 'Post 1',
'id_1' => '20',
'name_1' => 'Post 2',
'id_2' => '30',
'name_2' => 'Post 3',
];
$chunked_array = array_chunk( $array, 2, true);
print_r( $chunked_array );
Ancora divertendosi con questo array, immaginiamo come potremmo scorrere il $chunked_array, e produrre solo i nomi.
foreach( $chunked_array as $key => $nested_array) {
echo $nested_array[ 'name_'. $key ]. PHP_EOL;
}
Chunking di un array di grandi dimensioni per l’elaborazione.
Se abbiamo un array molto grande, possiamo usarlo array_chunkper suddividerlo in blocchi più piccoli che potremmo quindi archiviare separatamente. Vediamo come potremmo farlo in WordPress:
$original_array = [...];
$post_id = get_the_ID();
$chunked_array = array_chunk( $original_array, 10, true );
foreach( $chunked_array as $key => $array) {
update_post_meta(
$post_id,
'_wc_chunked_array_partial_'. $post_id,
$array
);
}
Ulteriori letture
Per ulteriori letture puoi consultare il manuale PHP.