【php】array_chunkで配列を分割する方法

array-chunkphp
書いてる人
あいりゅー

プログラミングを学びながら更新しています。
iPhone/iPad/Mac/Apple WatchなどのApple製品はこちらで主に更新しています。
麻雀の反省をひたすら掲載してるブログもやってます。

あいりゅーをフォローする

このページについて

このページではphpで使えるarray_chunkを使って配列を指定した数に分割する方法の解説をしています。

array_chunk

array_chunkは配列に対して使う事ができる関数です。この関数は配列を指定した数で分割する事ができます。

array_chunk(配列,数,添字設定);
配列
分割したい配列を指定します。
分割後の各配列に入れる要素の上限数を設定します。
添字設定
有効にすると添字を維持したままにします。デフォルトでは無効になっています。

例えば以下のように行なった場合、

$a = [1,2,3,4,5,6];array_chunk($a,3);

この場合、「$aを3こずつ分割し、新たに配列を作る」という処理になります。これの実行結果をvar_dumpで確認するとこうなります。

array_chunkの例

最初は$aという1つの大きな配列の中に6個の数字が入っていましたが、chunkを使うと$aの中にさらに配列が2個でき、その中に数字が最大3個まで入っている配列が出来上がっています。

今回はキリ良く分割できましたが、一番最後の配列のみ中途半端な数になることもあり得ます。その場合はエラーとはならず、そのまま配列が生成されます。

array_chunkで分割すると最後の配列が中途半端になることもある

この場合は4で分割しましたが、二つ目の配列はそもそも数が足りていないので、残った数を全て入れています。

添字設定

array_chunkでは添字を維持するかどうかの設定ができます。通常は添字はリセットされ、それぞれの配列ごとに新たに振り分けます。なので分割後の配列の扱い方は以下のようになります。

$a=[1,2,3,4,5];
$b = array_chunk($a,2);
echo $b[1][0];

この場合は分割後の配列が入っている$bの0番目の0番目を指定しているので3が出力されます。次に添字設定を有効にした場合どうなるかと言いますと

$a = [1,2,3,4,5];
$b = array_chunk($a,2,true);
echo $b[1][0]; //エラー
echo $b[1][2]; //3

同じように3を出力したい場合でも、上の指定方法だとエラーとなります。逆にその下の指定方法であれば、3が出力されます。これは添字設定がtrueになっているのが理由なんですが、これは「元々の配列で割り当てられているキーをそのまま維持する」という機能だからです。

$aの配列で割り当てられているキーは左から順番に01234です。そして添字設定を無効にした場合、各配列で新たに添字が割り振られます。そのため$aの中にまず0番目の配列と1番目の配列ができます。そして0番目の配列の中には数字が2つ、0番目と1番目があります。1番目の配列も同様に、2つの数字に対してキーが割り当てられます。

しかし添字設定を有効にした場合、$aで使われていたキーをそのまま使用します。なので$aの中に配列がどれだけ生成されても、$aのキーを使えばOKということになります。ただしあくまでそれぞれの値のキーが変わっていないだけであって、配列の位置を指定する必要はあります。なのでecho $b[2]とした場合は「$bの2番目の配列を指定」という意味になるので警告が出ます。ちゃんと配列→値の順番に指定しましょう。

関数で便利に使う

ここからはおまけです。functionを使って、少しだけ便利に使ってみましょう。通常、分割したい配列と分割する数字をセットでchunk関数に渡す必要があります。素数以外であれば2か3で綺麗に割り切れるため、そんな感じの関数を作ってみました。

function arrSplit($arr) {
$c = count($arr);
for ($i=2;$i<$c;$i++) {
$d = $c%$i;
if ($d == 0) {
break;
}
}
$ac = array_chunk($arr,$i);
return $ac;
}

この関数は「配列の中の数を調べて、その数がちょうど割り切れる数でarray_chunkを実行して返す」というものになります。出番があるかどうかはわからない上に、素数(11や17など)になると分割できないので配列をそのまま返すという処理を行なってしまいますが、ひとまずこのように扱うこともできますよっていう紹介です。実際に使うとこうなります。

配列分割関数の関数化

配列の中身は9個なので、3こずつに分割した配列が生成されています。どこで使うんでしょうかね。

まとめ

array_chunkは配列を指定した数に分割し、新たな配列を作る関数です。使う場面はそんなに多く無いと思いますが、いざという時のために使い方を覚えていきたいですね。

phpの基礎
phpとは?JavaScriptとの違いは?みたいなことから、基本の書き方などを解説。
echoとprint
画面に文字を出力する2種類の言語構造の使い方
変数
phpで使える変数の扱い方などを解説しています。
変数のスコープ(有効範囲)
変数のスコープについての解説です。
var_dump
変数の情報を見ることができる関数
print_r
変数の情報をわかりやすい形式で表示する関数
配列と連想配列
配列と連想配列の書き方と、便利な関数の解説など。
key
連想配列のキーを返してくれます。内部ポインタ関係あり。
count
配列や連想配列の要素数を数えてくれる関数の使い方解説。
ソート関数
配列に対してソートを行う関数の中から、代表的な5つの使い方解説です。
array_reverse
配列の中身の順番を反転させる関数です。
array_chunk
配列を指定した数で分割させるarray_chunk関数の使い方解説です。
array_combine
2つの配列を足して1つの連想配列にする関数です。
array_diff
2つの配列を比較して、存在しない値を出力する関数
array_push
配列に対して後方に要素を追加する関数
array_unshift
配列に対して先頭に要素を追加する関数。
array_shift
配列の先頭の要素を取り出す関数。
array_merge
複数の配列を統合して1次元の配列にする関数
array_intersect
2つの配列を比較して、両方に共通するものを出力する関数
include
includeを使って別のphpファイルを読み込む方法の解説。
if文
if文を使って処理を変更させる方法の解説。
switch文
switch文を使って複数の処理分岐を行わせたい時に使います。
forループ
forループを使って同じ処理を行わせる方法の解説です。
whileループ
whileループを使って同じ処理を行わせる方法の解説と注意点。
do-whileループ
do-whileループを使って同じ処理を行わせる方法の解説です。
foreachループ
foreachループを使って配列内のアイテム全てに処理を行う方法の解説です。
continue
ループ処理の残りをスキップしつつ、ループの先頭に戻る制御構造
ループのネスト構造(入れ子)
ループの中にループを入れる書き方や考え方の解説。
function
functionを使って自作の関数を作成・使用する方法の解説。
引数の種類と書き方解説
functionで扱う引数の種類と書き方を解説
return
returnの使い方と関数での使い方解説。
class
classを作成して変数と関数を1つにまとめる方法と使い方の解説。
constructとdestruct
classのインスタンス作成と同時に処理を行うconstructと、スクリプトの終了と同時に実行するdestructの解説です。
インターフェイス
インターフェイスという用語の解説と、実際の使い方解説
トレイト
コードを再利用するのに便利なトレイトの解説です。
列挙型
プログラム中で使う変数名をあらかじめ定義しておく。そんな感じの型。
PDOを使ってMySQLへ接続
PDOを使ってMySQLへ接続し、データを取得する方法の解説です。
データの加工と表示
PDOでデータベースから取得したデータを加工して表示する方法の解説です。
HTMLフォームのデータ受け取りと表示
HTMLで作ったフォームからのデータの受け取り方法と、その表示方法の解説です。
タイトルとURLをコピーしました