chunk とは ?
chunk とは 塊 (カタマリ)、 つまり 情報のひとまとまり を意味します。
読みは 「ちゃんく」 です。
余談ですが、
マインクラフトのチャンクは、ワールドを一定の大きさに区切った塊のことです。
私の大好きなピーナッツクリーム Skippy も、塊が入ったほうは「 チャンク 」の単語が入ってます。
Super Chunk Extra Crunchy
です。
なんかとにかくすごい。
Super だけあって、粒感が楽しめます。
array_chunk
PHP の array_chunk
は 「配列を分割する」 関数です。
リファレンス
PHP リファレンス
http://php.net/manual/ja/function.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 件ずつ
という処理をしています。
メモリを抑えたい場合に有効です。
使ってみてくださいー。