こんにちは!エンジニアのオータケです!
PHPでWebサイトを構築する際に配列をよく使うかと思います。
その配列を扱う際に配列の要素数が幾つか知りたいと思ったことありますよね?
この記事では
・count/sizeof関数を使って配列の要素数を取得する方法
・count関数の便利な使い方
といった基本的な内容から
・array_count_values関数を使い配列の値の出現回数を調べる方法
・array_fill関数を使い要素数を決めて配列を初期化する方法
といった応用的な解説もします。
今回はそんな配列の要素数について、わかりやすく解説します!
この記事の目次
配列の要素数を数える
countとは
まず、配列の要素数を知るためにはcount関数を使うことで知ることができます。
このcount関数ですが使い方がとても簡単です。
書き方:
int count ( $配列 [, モード ] )
引数:
第一引数には対象の$配列を指定します。
第二引数にはカウント時のモードをしています。COUNT_RECURSIVE (または 1) を指定した場合は、再帰的にカウントが行われます。
返り値:
配列の要素数を返します。
配列がセットされていない場合や、空の配列として初期化されている場合は0を返します。
countの使い方
では実際にサンプルコードをみてみましょう。
サンプルプログラム1
$array = [1, 2, 3, 4]; echo count($array);
実行結果:
4
このコードでは配列に1,2,3,4という値を入れて初期化しています。
そしてcount関数を使い要素数を取得しているというものです。
配列には4つの要素があるためこのcount関数を呼び出した結果は4になります。
とても簡単ですよね?
では次にcount関数の便利な使い方を見てみましょう。
サンプルプログラム2
$array = [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ]; echo count($array, COUNT_RECURSIVE);
実行結果:
12
このコードでは先程とは少し違い第二引数に何やらCOUNT_RECURSIVEという値を渡しています。
そして実行結果は12と表示されます。
実はcount関数を呼び出す際にCOUNT_RECURSIVEという値を指定することで多次元配列を再帰的にカウントしてくれるのです。
わかりやすく言えば、複雑な配列の構造であっても全ての要素数をカウントしてくれるという設定になります。
では今回なぜ12という結果が返ってきたかを解説します。
まず1~9までの配列の要素数がそれぞれ9個、そして[1, 2, 3]と[4, 5, 6]、[7, 8, 9]の3つの配列があるということで「9+3」で12個という結果になっています。
ぱっと見、9個と勘違いしてしまいそうですがそうではないので注意が必要ですね。
もしこのCOUNT_RESURSIVEを指定しないで前回のコードのようにcount関数を呼んだ場合、3になります。
なぜ、3となるのかですがこれは配列変数$arrayの中に[1, 2, 3]と[4, 5, 6]、[7, 8, 9]の3つの配列が入っているため実行結果では3と表示されます。
sizeofとは
次にsizeof関数を使って配列の要素数を知る方法を解説します。
書き方:
int count ( $配列 [, モード ] )
sizeof関数はcount関数のエイリアスで基本処理はほぼ同じです。
sizeofの使い方
以下にsizeof関数を使用して、配列の要素数を数えるサンプルを紹介します。
サンプルプログラム
$array = [1, 2, 3, 4]; echo sizeof($array);
実行結果:
4
前項の一番最初のサンプルコードとの違いとしてはcount関数がsizeofに変わったくらいです。
それもそのはず。
このsizeof関数は内部的にcount関数を呼んでおり実際にはcount関数を呼んでいることに変わりはありません。
ではなぜこのような関数があるかですが、これはC言語にsizeof関数がありこういったプログラマに対する配慮ではないかと考えます。
ちなみに先程のcount関数の第二引数で指定したCOUNT_RESURSIVEも使うことができます。