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

PHP

PHPで配列を分割する方法について書いています。
配列を分割する際にはarray_chunk関数を使うと良いです。

公式ドキュメントはこちらです: array_chunk

array_chunk関数の使い方

array_chunk 関数は、渡した配列を指定したサイズごとに分割します。
構文は以下のとおりです。

array_chunk(array $array, int $length, bool $preserve_keys = false): array
  • $array: 分割する配列。
  • $length: 分割する数。
  • $preserve_keys: (オプション) trueを指定すると、元の配列のキーが保持されます。デフォルトはfalseです。

この関数は、多次元配列を返し、各要素は元の配列の一部である配列となります。

実際につかってみたサンプルコード

実際にarray_chunk関数を使ったサンプルコードです。

指定したサイズに分割する

ひとつの配列を2つずつに分割しています。

<?php

$fruits = ['apple', 'banana', 'melon', 'orange', 'lemon'];
$chunkedFruits = array_chunk($fruits, 2);

print_r($chunkedFruits);

最初に$fruits配列を作成して、次の行でarray_chunk関数を使って分割しています。
第1引数に分割したい配列と、第2引数に分割するサイズを指定しています。

print_rで表示した結果が下記になります。
ひとつの配列が指定したサイズ(2つずつ)に分割されました。

Array
(
    [0] => Array
        (
            [0] => apple
            [1] => banana
        )

    [1] => Array
        (
            [0] => melon
            [1] => orange
        )

    [2] => Array
        (
            [0] => lemon
        )

)

配列要素が5個だったので、ちょうど分割されず、3つ目の配列は「lemon」の要素ひとつだけになっていますね。
このように簡単に分割することが可能です。

連想配列を分割する

次に連想配列を分割してみます。
先ほどと同じ配列に、キーを追加して分割してみました。

<?php
$fruits = [
    'red' => 'apple',
    'yellow' => 'banana',
    'green' => 'melon',
    'orange' => 'orange',
    'yellow2' => 'lemon'
];
$chunkedFruits = array_chunk($fruits, 2);

print_r($chunkedFruits);

$fruits配列にキーを追加して、array_chunk関数で同じように2つずつに分割しています。

結果は下記のようになります。
連想配列のキーが消えて分割されることが確認できました。

Array
(
    [0] => Array
        (
            [0] => apple
            [1] => banana
        )

    [1] => Array
        (
            [0] => melon
            [1] => orange
        )

    [2] => Array
        (
            [0] => lemon
        )
)

キーを保持して連想配列を分割する

array_chunk関数の第3引数にtrueを渡すと、連想配列のキーを保持したまま分割してくれます。

$fruits = [
    'red' => 'apple',
    'yellow' => 'banana',
    'green' => 'melon',
    'orange' => 'orange',
    'yellow2' => 'lemon'
];
$chunkedFruits = array_chunk($fruits, 2, true);

print_r($chunkedFruits);

先ほどと同じ配列をarray_chunk関数で分割しています。
変えたのは、関数の第3引数にtrueを渡しているところです。

結果を確認すると、下記のように連想配列のキーを保持したまま分割してくれました。

Array
(
    [0] => Array
        (
            [red] => apple
            [yellow] => banana
        )

    [1] => Array
        (
            [green] => melon
            [orange] => orange
        )

    [2] => Array
        (
            [yellow2] => lemon
        )
)

その他注意点

最後に実行するときの注意点です。
分割サイズが配列より大きい場合は、配列の中にひとつの配列が作成されます。

さきほどのコードで、サイズを10と指定すると…

$chunkedFruits = array_chunk($fruits, 10, true);

下記のように、配列の配下に単一の配列ができます。

Array
(
    [0] => Array
        (
            [red] => apple
            [yellow] => banana
            [green] => melon
            [orange] => orange
            [yellow2] => lemon
        )

)

また、分割するサイズにマイナス値や0を指定すると、下記のようにエラーになります。
PHP Fatal error: Uncaught ValueError: array_chunk(): Argument #2 ($length) must be greater than 0

おわりに

今回はPHPのarray_chunk関数を使って、配列を分割する方法を確認していきました。
記事の内容をまとめると、下記のようになります。

・array_chunk関数を使うことで、指定したサイズに配列を分割することができた。
・array_chunk関数の引数は第1引数が配列、第2引数が分割するサイズ。
・連想配列の分割時には、配列のキーが消える。キーを保持したい場合には第3引数をtrueにする。

コメント

タイトルとURLをコピーしました