【PHP8.x】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)

array_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で配列を分割処理する

<?php

/**
 * 指定された配列を一定の長さのチャンクに分割し、
 * 各チャンクをforeachループで処理して出力する例です。
 *
 * array_chunk関数は、配列を複数の小さな配列(チャンク)に分割します。
 * この例では、元の配列を3つの要素からなるチャンクに分割し、
 * それらのチャンクをforeachループで一つずつ取り出して表示します。
 */
function demonstrateArrayChunkWithForeach(): void
{
    // 処理対象となる元の配列を準備します。
    $originalArray = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
    echo "元の配列:\n";
    print_r($originalArray);

    // array_chunk関数を使って配列を3つの要素からなるチャンクに分割します。
    // 第2引数: チャンクの長さ
    // 第3引数: preserve_keys (オプション、デフォルトはfalse)。
    //          falseの場合、各チャンクのキーは0から再割り当てされます。
    $chunkedArrays = array_chunk($originalArray, 3);

    echo "\narray_chunkで分割された配列 (各チャンク3要素、キーは0から再割り当て):\n";
    print_r($chunkedArrays);

    // 分割されたチャンクをforeachループで一つずつ取り出して処理します。
    echo "\n--- 各チャンクの内容 ---\n";
    foreach ($chunkedArrays as $index => $chunk) {
        echo "チャンク " . ($index + 1) . ": ";
        print_r($chunk);
        // 必要であれば、各チャンク内の要素をさらにループで処理することも可能です。
        // foreach ($chunk as $item) {
        //     echo "  要素: " . $item . "\n";
        // }
    }
}

// 関数を実行して、array_chunkとforeachの動作を確認します。
demonstrateArrayChunkWithForeach();

?>

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 で連想配列を分割する

<?php

/**
 * array_chunk() を連想配列で使用する例を示す関数
 *
 * この関数は、第3引数 $preserve_keys の違いによる動作の差を明確にします。
 */
function associativeArrayChunkExample(): void
{
    // ユーザーIDをキーとする連想配列を用意します
    $users = [
        'user_a' => ['name' => 'Alice', 'age' => 25],
        'user_b' => ['name' => 'Bob', 'age' => 30],
        'user_c' => ['name' => 'Charlie', 'age' => 22],
        'user_d' => ['name' => 'David', 'age' => 35],
        'user_e' => ['name' => 'Eve', 'age' => 28],
    ];

    echo "■ 元の連想配列:\n";
    print_r($users);
    echo "\n";

    // --- ケース1: preserve_keys = false (デフォルト) ---
    // 第3引数を省略するか false を指定すると、元のキー ('user_a' など) は破棄され、
    // チャンク内のキーは 0 から始まる数値インデックスに振り直されます。
    echo "■ array_chunk(\$users, 2, false) の結果 (キーは保持されない):\n";
    $chunkedWithoutKeys = array_chunk($users, 2, false);
    print_r($chunkedWithoutKeys);
    echo "\n";

    // --- ケース2: preserve_keys = true ---
    // 第3引数に true を指定すると、元の連想配列のキーが保持されます。
    echo "■ array_chunk(\$users, 2, true) の結果 (キーが保持される):\n";
    $chunkedWithKeys = array_chunk($users, 2, true);
    print_r($chunkedWithKeys);
}

// 関数を実行して結果を表示します
associativeArrayChunkExample();

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を指定してください。この関数は結果として多次元配列を返します。また、指定した要素数で割り切れない場合、最後の配列に含まれる要素数は少なくなる点も覚えておきましょう。

【PHP8.x】array_chunk関数の使い方 | いっしー@Webエンジニア