chunk とは ?

chunk とは 塊 (カタマリ)、 つまり 情報のひとまとまり を意味します。

読みは 「ちゃんく」 です。


余談ですが、

マインクラフトのチャンクは、ワールドを一定の大きさに区切った塊のことです。

私の大好きなピーナッツクリーム Skippy も、塊が入ったほうは「 チャンク 」の単語が入ってます。

Super Chunk Extra Crunchy です。
なんかとにかくすごい。

Super だけあって、粒感が楽しめます。

array_chunk

PHP の array_chunk は 「配列を分割する」 関数です。

リファレンス

PHP リファレンス
http://php.net/manual/ja/function.array-chunk.php

リファレンスからコードサンプルを引用します。

 1<?php
 2$input_array = array('a', 'b', 'c', 'd', 'e');
 3print_r(array_chunk($input_array, 2));
 4
 5Array
 6(
 7    [0] => Array
 8        (
 9            [0] => a
10            [1] => b
11        )
12
13    [1] => Array
14        (
15            [0] => c
16            [1] => d
17        )
18
19    [2] => Array
20        (
21            [0] => e
22        )
23
24)

要素 5 つの配列を、要素が 2 ずつの配列に分解しています。

このように、フラットな配列を、指定要素数の配列にまとめ直してくれます。
まとめ直す際に、配列が 1 段下がりますので、そこだけ注意です。

どんなときに ?

「大量のデータを扱いたいけど、ちょっと量が多くて重たくなりそう」というときに、チャンクに分割し、チャンクごとに処理することで負荷分散などが期待できます。

具体的なユースケースは「大きめの CSV をインポートしたいとき」などですね。

1// イメージだけ感のサンプル
2$chanks = array_chunk($csv_rows, 1000);
3foreach ($chanks as $chank) {
4    CsvImporter::insertRows(chank);
5}

雑なサンプルですが、

  • 1 万行あるかもしれない CSV ファイルを読みだしたときに
  • RDB にインポートするのは 1000 件ずつ

という処理をしています。

メモリを抑えたい場合に有効です。

使ってみてくださいー。