Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【PHP8.x】array_chunk()関数の使い方

array_chunk関数の使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

array_chunk関数は、配列を複数の小さな配列(チャンク)に分割する関数です。元の配列の内容は変更されず、分割された新しい配列が返されます。

具体的には、array_chunk関数は、入力として与えられた配列と、各チャンクのサイズを受け取ります。指定されたサイズに基づいて、配列を連続した部分配列に分割します。例えば、サイズが2の場合、元の配列が[1, 2, 3, 4, 5]であれば、[[1, 2], [3, 4], [5]]のように分割されます。

オプションで、第3引数にtrueまたはfalseを指定することで、最後のチャンクが指定されたサイズより小さくなる場合に、キーを保持するかどうかを制御できます。trueを指定すると、元の配列のキーが保持されます。false(デフォルト)を指定すると、キーは0から始まる連番で再割り当てされます。

この関数は、大きな配列を処理する際に、処理を分割したり、表示をページ分割したりするのに役立ちます。例えば、データベースから取得した大量のデータを一度に表示するのではなく、array_chunk関数で分割し、ページごとに表示することができます。また、並列処理を行う際に、配列を分割して複数のプロセスに割り当てることも可能です。

array_chunk関数を使用することで、メモリ使用量を抑えたり、処理速度を向上させたりすることができます。ただし、分割後の配列の構造を理解し、必要に応じてキーを保持するかどうかを適切に設定する必要があります。

構文(syntax)

1array_chunk(array $array, int $length, bool $preserve_keys = false): array

引数(parameters)

array $array, int $length, bool $preserve_keys = false

  • array $array: チャンク(塊)に分割したい配列
  • int $length: 各チャンクに含める要素の数。正の整数を指定します。
  • bool $preserve_keys = false: trueを指定すると、元の配列のキーを保持したままチャンクを作成します。デフォルトはfalseで、キーは再採番されます。

戻り値(return)

array

指定された配列を指定されたチャンクサイズで分割した、多次元配列を返します。

サンプルコード

PHP array_chunkとforeachで配列を分割処理する

1<?php
2
3/**
4 * 指定された配列を一定の長さのチャンクに分割し、
5 * 各チャンクをforeachループで処理して出力する例です。
6 *
7 * array_chunk関数は、配列を複数の小さな配列(チャンク)に分割します。
8 * この例では、元の配列を3つの要素からなるチャンクに分割し、
9 * それらのチャンクをforeachループで一つずつ取り出して表示します。
10 */
11function demonstrateArrayChunkWithForeach(): void
12{
13    // 処理対象となる元の配列を準備します。
14    $originalArray = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
15    echo "元の配列:\n";
16    print_r($originalArray);
17
18    // array_chunk関数を使って配列を3つの要素からなるチャンクに分割します。
19    // 第2引数: チャンクの長さ
20    // 第3引数: preserve_keys (オプション、デフォルトはfalse)。
21    //          falseの場合、各チャンクのキーは0から再割り当てされます。
22    $chunkedArrays = array_chunk($originalArray, 3);
23
24    echo "\narray_chunkで分割された配列 (各チャンク3要素、キーは0から再割り当て):\n";
25    print_r($chunkedArrays);
26
27    // 分割されたチャンクをforeachループで一つずつ取り出して処理します。
28    echo "\n--- 各チャンクの内容 ---\n";
29    foreach ($chunkedArrays as $index => $chunk) {
30        echo "チャンク " . ($index + 1) . ": ";
31        print_r($chunk);
32        // 必要であれば、各チャンク内の要素をさらにループで処理することも可能です。
33        // foreach ($chunk as $item) {
34        //     echo "  要素: " . $item . "\n";
35        // }
36    }
37}
38
39// 関数を実行して、array_chunkとforeachの動作を確認します。
40demonstrateArrayChunkWithForeach();
41
42?>

PHPのarray_chunk関数は、指定された配列を一定の長さに区切って複数の小さな配列(チャンク)に分割するための関数です。これは、大きなデータを扱いやすい塊に分ける際などに非常に役立ちます。

この関数は、分割したい元の配列を第一引数$arrayに、各チャンクの要素数を第二引数$lengthに指定します。第三引数$preserve_keysはオプションで、デフォルトはfalseです。falseの場合、分割された各チャンク内のキーは0から再割り当てされますが、trueを指定すると元の配列のキーが保持されます。戻り値は、分割されたチャンクを含む多次元配列です。

提供されたサンプルコードでは、[1, 2, ..., 10]という元の配列をarray_chunk関数で3要素ずつのチャンクに分割しています。$preserve_keysは指定されていないためデフォルトのfalseが適用され、各チャンクのキーは0から振られます。分割された結果の多次元配列は、その後のforeachループを使って一つずつ取り出され、その内容が表示されています。このようにarray_chunkforeachを組み合わせることで、分割されたデータを順番に処理していくことが容易になります。この機能は、データのページネーションや、特定の要素数ごとにまとめて処理を行いたい場合に特に便利です。

array_chunk関数は、元の配列を指定した長さの複数のチャンク(小さな配列)に分割します。最後のチャンクは指定した長さより短くなる可能性があることに注意してください。特に重要なのは、デフォルトでは各チャンク内のキーが0から再割り当てされる点です。元の配列のキーを保持したい場合は、array_chunkの第三引数preserve_keystrueを指定してください。array_chunkの戻り値はチャンクの配列(多次元配列)なので、foreachで各チャンクを取り出し、必要に応じてそのチャンク内をさらにループして要素を処理することができます。空の配列を渡すと、array_chunkも空の配列を返します。

PHP array_chunk() で配列を分割する

1<?php
2
3/**
4 * array_chunk() 関数は、配列を複数のチャンク(断片)に分割します。
5 * 各チャンクは指定された長さ($length)の要素を持ちます。
6 *
7 * @param array $array 分割する入力配列。
8 * @param int $length 各チャンクのサイズ。
9 * @param bool $preserve_keys キーを保持するかどうか。デフォルトは false (新しい数値インデックス)。
10 * @return array 分割されたチャンクを含む多次元配列。
11 */
12
13// サンプルデータとして配列を準備します
14$numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
15echo "元の配列:\n";
16print_r($numbers);
17
18echo "\n--- 例1: キーを保持しない場合 (デフォルト) ---\n";
19// 配列を3つの要素を持つチャンクに分割します。
20// preserve_keys はデフォルトの false なので、新しいチャンクのインデックスは0から始まります。
21$chunkedArrayDefault = array_chunk($numbers, 3);
22echo "各チャンクの長さが3で、キーを保持しない場合:\n";
23print_r($chunkedArrayDefault);
24/*
25出力例:
26Array
27(
28    [0] => Array
29        (
30            [0] => 1
31            [1] => 2
32            [2] => 3
33        )
34
35    [1] => Array
36        (
37            [0] => 4
38            [1] => 5
39            [2] => 6
40        )
41
42    [2] => Array
43        (
44            [0] => 7
45            [1] => 8
46            [2] => 9
47        )
48
49    [3] => Array
50        (
51            [0] => 10
52        )
53
54)
55*/
56
57echo "\n--- 例2: キーを保持する場合 ---\n";
58// 配列を3つの要素を持つチャンクに分割し、元のキーを保持します。
59// preserve_keys を true に設定すると、元の配列のキーがチャンク内に維持されます。
60$chunkedArrayPreserveKeys = array_chunk($numbers, 3, true);
61echo "各チャンクの長さが3で、キーを保持する場合:\n";
62print_r($chunkedArrayPreserveKeys);
63/*
64出力例:
65Array
66(
67    [0] => Array
68        (
69            [0] => 1
70            [1] => 2
71            [2] => 3
72        )
73
74    [1] => Array
75        (
76            [3] => 4
77            [4] => 5
78            [5] => 6
79        )
80
81    [2] => Array
82        (
83            [6] => 7
84            [7] => 8
85            [8] => 9
86        )
87
88    [3] => Array
89        (
90            [9] => 10
91        )
92
93)
94*/
95
96echo "\n--- 例3: 連想配列の場合 ---\n";
97$associativeArray = [
98    'a' => 100,
99    'b' => 200,
100    'c' => 300,
101    'd' => 400,
102    'e' => 500,
103];
104echo "元の連想配列:\n";
105print_r($associativeArray);
106
107echo "\n連想配列を2つの要素でチャンクし、キーを保持しない場合:\n";
108$chunkedAssociativeDefault = array_chunk($associativeArray, 2);
109print_r($chunkedAssociativeDefault);
110/*
111出力例:
112Array
113(
114    [0] => Array
115        (
116            [0] => 100
117            [1] => 200
118        )
119
120    [1] => Array
121        (
122            [0] => 300
123            [1] => 400
124        )
125
126    [2] => Array
127        (
128            [0] => 500
129        )
130
131)
132*/
133
134echo "\n連想配列を2つの要素でチャンクし、キーを保持する場合:\n";
135$chunkedAssociativePreserveKeys = array_chunk($associativeArray, 2, true);
136print_r($chunkedAssociativePreserveKeys);
137/*
138出力例:
139Array
140(
141    [0] => Array
142        (
143            [a] => 100
144            [b] => 200
145        )
146
147    [1] => Array
148        (
149            [c] => 300
150            [d] => 400
151        )
152
153    [2] => Array
154        (
155            [e] => 500
156        )
157
158)
159*/
160
161?>

PHPのarray_chunk関数は、与えられた配列を、指定された要素数ごとの小さな配列(チャンク)に分割するために使用されます。大量のデータをページネーションやバッチ処理などで区切って扱う際に便利な関数です。

この関数は、分割したい「元の配列」と、各チャンクに含める「要素の長さ」を必須の引数として受け取ります。3番目の引数$preserve_keysはオプションで、デフォルトはfalseです。この引数をtrueに設定すると、分割後の各チャンク内で元の配列のキーがそのまま保持されます。一方、falseのまま(または省略)にすると、各チャンクのインデックスは0から新たに振り直されます。

関数が返す戻り値は、分割された各チャンクを要素として含む多次元配列です。

サンプルコードでは、この関数の挙動が具体的に示されています。最初の例では、キーを保持しないデフォルトの動作で配列が分割され、各チャンクのインデックスが0から始まる新しい数値インデックスに再割り当てされています。次の例では$preserve_keystrueに設定したため、元の配列のインデックスが各チャンク内でそのまま維持されていることがわかります。さらに連想配列を分割する例も示されており、$preserve_keysの設定によってキーの扱いに違いがあることを理解できます。

最後に残るチャンクは、指定した長さより短くなる場合があります。また、第二引数のlengthには必ず1以上の整数を指定してください。0以下の値を指定するとエラーとなりますので注意が必要です。第三引数preserve_keysfalse(デフォルト)に設定すると、元の連想配列のキーは失われ、新しいチャンク内のキーは0から始まる数値にリセットされます。元のキーを保持したい場合は、preserve_keysを明示的にtrueに設定してください。戻り値は常に多次元配列となります。

PHP array_chunk キー保持の挙動

1<?php
2
3/**
4 * 配列を複数のチャンク(小配列)に分割し、
5 * キーを保持するかどうかの違いを示すサンプルコードです。
6 *
7 * array_chunk() 関数は、指定されたサイズのチャンクに配列を分割します。
8 * 第三引数 $preserve_keys を true にすると、元の配列のキーが保持されます。
9 * false (デフォルト) の場合、各チャンクは0から始まる新しい数値キーで再インデックスされます。
10 */
11function demonstrateArrayChunkWithKeys(): void
12{
13    // 異なるタイプのキー(数値、文字列)を持つサンプル配列を定義
14    $products = [
15        101 => 'Laptop',
16        'SKU-002' => 'Mouse',
17        103 => 'Keyboard',
18        'SKU-004' => 'Monitor',
19        105 => 'Webcam',
20        'SKU-006' => 'Printer',
21    ];
22
23    $chunkSize = 2; // 各チャンクのサイズを指定
24
25    echo "--- 元の配列 ---\n";
26    print_r($products);
27
28    // --- キーを保持しない場合 (デフォルトの動作) ---
29    // $preserve_keys を指定しない、または false に設定した場合。
30    // 各チャンクのキーは 0, 1, 2... と再インデックスされます。
31    $chunksWithoutPreservingKeys = array_chunk($products, $chunkSize, false);
32
33    echo "\n--- array_chunk でキーを保持しない場合 ($preserve_keys = false) ---\n";
34    echo "  チャンクサイズ: {$chunkSize}\n";
35    print_r($chunksWithoutPreservingKeys);
36
37    // --- キーを保持する場合 ---
38    // $preserve_keys を true に設定した場合。
39    // 元の配列のキーが各チャンクにそのまま引き継がれます。
40    $chunksWithPreservingKeys = array_chunk($products, $chunkSize, true);
41
42    echo "\n--- array_chunk でキーを保持する場合 ($preserve_keys = true) ---\n";
43    echo "  チャンクサイズ: {$chunkSize}\n";
44    print_r($chunksWithPreservingKeys);
45}
46
47// 関数を実行してデモンストレーションを開始
48demonstrateArrayChunkWithKeys();
49

PHPのarray_chunk関数は、指定された配列を複数の小さな配列(チャンク)に分割するために使用されます。この関数は、データを一定のサイズごとに処理したい場合に非常に役立ちます。

第一引数には分割したい「元の配列」を指定します。第二引数 $length は、各チャンクが持つ「要素の最大数」を整数で定義します。例えば2を指定すると、各チャンクは最大2つの要素で構成されます。

第三引数 $preserve_keys はオプションで、分割時に元の配列の「キーを保持するかどうか」を真偽値で設定します。false(デフォルト値)を指定するか省略した場合、分割された各チャンクのキーは、0から始まる新しい数値で再インデックスされます。これに対し、true を指定すると、元の配列で使用されていた数値キーや文字列キーが、分割後の各チャンクでもそのまま保持されます。

この関数は、分割されたチャンクを要素として含む新しい配列を戻り値として返します。サンプルコードは、数値キーと文字列キーが混在する配列を例に、$preserve_keysfalse を設定した場合と true を設定した場合で、キーの挙動がどのように異なるかを具体的に示しています。元の配列のキー構造を維持したい場合は、$preserve_keystrue を指定することが重要です。

array_chunk関数を使用する際、最も重要な注意点は第三引数$preserve_keysの扱いです。この引数をfalse(デフォルト)にすると、元の配列のキーが数値・文字列問わず、各チャンクのキーは0から始まる新しい数値キーに再割り当てされます。元の配列のキーに意味があり、後続の処理でそのキーを参照する連想配列の場合、意図せずキーが失われる可能性があるので特に注意が必要です。元の配列のキーを保持したい場合は、必ず$preserve_keystrueを明示的に設定してください。また、この関数は常に分割された複数の小配列を含む多次元配列を戻り値として返しますので、その点を理解して利用することが重要です。

PHP array_chunk で連想配列を分割する

1<?php
2
3/**
4 * array_chunk() を連想配列で使用する例を示す関数
5 *
6 * この関数は、第3引数 $preserve_keys の違いによる動作の差を明確にします。
7 */
8function associativeArrayChunkExample(): void
9{
10    // ユーザーIDをキーとする連想配列を用意します
11    $users = [
12        'user_a' => ['name' => 'Alice', 'age' => 25],
13        'user_b' => ['name' => 'Bob', 'age' => 30],
14        'user_c' => ['name' => 'Charlie', 'age' => 22],
15        'user_d' => ['name' => 'David', 'age' => 35],
16        'user_e' => ['name' => 'Eve', 'age' => 28],
17    ];
18
19    echo "■ 元の連想配列:\n";
20    print_r($users);
21    echo "\n";
22
23    // --- ケース1: preserve_keys = false (デフォルト) ---
24    // 第3引数を省略するか false を指定すると、元のキー ('user_a' など) は破棄され、
25    // チャンク内のキーは 0 から始まる数値インデックスに振り直されます。
26    echo "■ array_chunk(\$users, 2, false) の結果 (キーは保持されない):\n";
27    $chunkedWithoutKeys = array_chunk($users, 2, false);
28    print_r($chunkedWithoutKeys);
29    echo "\n";
30
31    // --- ケース2: preserve_keys = true ---
32    // 第3引数に true を指定すると、元の連想配列のキーが保持されます。
33    echo "■ array_chunk(\$users, 2, true) の結果 (キーが保持される):\n";
34    $chunkedWithKeys = array_chunk($users, 2, true);
35    print_r($chunkedWithKeys);
36}
37
38// 関数を実行して結果を表示します
39associativeArrayChunkExample();
40

array_chunk()関数は、指定した配列を、より小さな配列のかたまり(チャンク)に分割するための関数です。戻り値として、分割されたチャンクを要素に持つ多次元配列を返します。

第1引数 $array には分割したい配列を、第2引数 $length には分割後のかたまり一つあたりに含める要素の数を整数で指定します。

特に連想配列を扱う際に重要となるのが、オプションの第3引数 $preserve_keys です。この引数で、元の配列のキーを保持するかどうかを真偽値(trueまたはfalse)で制御します。デフォルトはfalseです。

サンプルコードでは、ユーザー情報を格納した連想配列を2つの要素ずつに分割しています。第3引数をfalseに設定するか省略した場合、元のキー(例: 'user_a')は破棄され、各チャンク内の要素には0から始まる数値のキーが新たに割り振られます。一方、第3引数にtrueを指定すると、元の連想配列のキーがそのまま保持された状態で配列が分割されます。このように、キーと値の関連性を保ったまま配列を分割したい場合に、この設定が役立ちます。

array_chunk関数を連想配列に使う際、最も注意すべきは第3引数$preserve_keysです。この引数を省略、またはfalseにすると、元の連想配列が持つキーは失われ、0から始まる数値キーに置き換えられてしまいます。分割後も元のキー情報を利用したい場合は、必ず第3引数にtrueを指定してください。この関数は結果として多次元配列を返します。また、指定した要素数で割り切れない場合、最後の配列に含まれる要素数は少なくなる点も覚えておきましょう。

関連コンテンツ

関連プログラミング言語