Używając fragmentu tablicy (array_chunk) możemy łatwo podzielić tablicę na tablicę wielowymiarową (tablicę tablic).
Funkcji fragmentu tablicy można użyć do podzielenia tablicy na mniejsze części, być może w celu ułatwienia przetwarzania.
Podstawowy przykład
Zakładając, że skonfigurujemy tablicę zgodnie z poniższym przykładem kodu ($arrayw wierszu 1), możemy podzielić tę tablicę na nową tablicę wielowymiarową za pomocą array_chunkfunkcji w wierszu 9.
Uruchomienie tego kodu spowodowałoby powstanie tablicy wielowymiarowej w wierszu 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
*) *)
**/
Kompozycja
$chunked_array = array_chunk( $array, $chunk, $preserve_keys );
Funkcja array_chunkakceptuje trzy parametry i (opcjonalne $array, domyślnie false). Są to:$chunk``$preserve_keys
- Parametr
$arrayprzyjmuje tablicę i jest tablicą początkową, którą chcemy przekształcić. - Akceptuje liczbę całkowitą i
$chunkjest liczbą, której używamy do dzielenia$arrayna części tej wartości. - Opcjonalny
$preserve_keysparametr akceptuje wartość logiczną i zachowuje klucze tablicy, jeślitrue.
Funkcje i konkretne przykłady
Zachowaj klucze
Eksplorując $preserve_keysparametr, nasz poprzedni przykład rozpoczyna indeks każdej zagnieżdżonej tablicy od 0. Jednak gdybyśmy przeszli truedo tego parametru, oryginalny indeks tablicy początkowej pozostałby nienaruszony:
$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 wyjściu klucze są teraz sekwencyjne, tak jak w oryginalnej tablicy (0, 1, 2, 3…).
Zachowaj klucze, gdy oryginalna tablica ma nazwane klucze
Jeśli nasza oryginalna tablica ma nazwane klucze, możemy zachować klucze, aby zachować je w naszej tablicy podzielonej na fragmenty.
Poniższy przykład ma z tego trochę zabawy. Powiedzmy, że w jakiś sposób otrzymaliśmy tablicę z wymieszanymi ze sobą kilkoma identyfikatorami postów i nazwami postów.
Możemy użyć array_chunkparametru $preserve_keysustawionego na, trueaby podzielić je na poszczególne posty.
$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 );
Wciąż dobrze bawiąc się tą tablicą, wyobraźmy sobie, jak możemy przejść przez $chunked_array, i wypisać tylko nazwy.
foreach( $chunked_array as $key => $nested_array) {
echo $nested_array[ 'name_'. $key ]. PHP_EOL;
}
Chunkowanie dużej tablicy do przetwarzania.
Jeśli mamy bardzo dużą tablicę, możemy array_chunkpodzielić ją na mniejsze kawałki, które następnie będziemy mogli przechowywać osobno. Zobaczmy, jak możemy to zrobić w WordPressie:
$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
);
}
Dalsza lektura
Więcej informacji można znaleźć w podręczniku PHP.