Bloco de Matriz
Usando array chunk (array_chunk) podemos facilmente dividir um array em um array multidimensional (um array de arrays).
A função array chunk pode ser usada para dividir um array em partes menores, talvez para torná-lo mais fácil de processar.
Exemplo básico
Supondo que configuramos um array conforme o exemplo de código abaixo ($arrayna linha 1), podemos fragmentar esse array em um novo array multidimensional usando a array_chunkfunção na linha 9.
A execução desse código resultaria na matriz multidimensional na linha 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
*) *)
**/
Composição
$chunked_array = array_chunk( $array, $chunk, $preserve_keys );
A array_chunkfunção aceita três parâmetros, $arraye $chunk( $preserve_keysopcional, falso por padrão). Estes são os seguintes:
- O
$arrayparâmetro aceita um array e é o array inicial que desejamos transformar. - O
$chunkaceita um inteiro, e é o número que usamos para dividir$arrayem partes desse valor. - O parâmetro opcional
$preserve_keysaceita um booleano e preservará as chaves do array setrue.
Recursos e exemplos específicos
Preservar chaves
Explorando o $preserve_keysparâmetro, nosso exemplo anterior inicia o índice de cada array aninhado em 0. No entanto, se passarmos truepara este parâmetro, o índice original do array inicial seria mantido intacto:
$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
*) *)
**/
Na saída, as chaves agora são sequenciais, como seriam no array original (0, 1, 2, 3…).
Preservar chaves quando a matriz original tiver chaves nomeadas
Se nosso array original tiver chaves nomeadas, podemos preservar as chaves para mantê-las em nosso array em partes.
O exemplo a seguir tem um pouco de diversão com isso. Digamos que temos de alguma forma um array com alguns Post IDs e Post Names misturados.
Poderíamos usar array_chunkcom o $preserve_keysparâmetro definido como truepara dividi-los em postagens individuais.
$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 );
Ainda nos divertindo com esse array, vamos imaginar como poderíamos fazer um loop pelo $chunked_array, e produzir apenas os nomes.
foreach( $chunked_array as $key => $nested_array) {
echo $nested_array[ 'name_'. $key ]. PHP_EOL;
}
Chunking uma grande matriz para processamento.
Se tivermos uma matriz muito grande, podemos array_chunkdividi-la em pedaços menores que poderíamos armazenar separadamente. Vamos ver como podemos fazer isso no 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
);
}
Leitura adicional
Para mais leitura você pode verificar o manual do PHP.