PHPで配列の要素数をカウントする方法について解説します。
PHPで配列の要素数を調べるにはcount関数を使います。count関数を用いることで配列の要素数を取得するだけでなく、繰り返し処理の際に使うこともできますし、多次元配列で配列の中に存在する配列をもカウントするなど複雑な処理ができますので、ぜひ参考にしてください。
目次
count関数の基本構文
まず、count関数の基本構文について説明します。
以下のように記述します。第一引数には要素を数える配列変数を入れます。第二引数のMODEにはCOUNT_RECURSIVEと入力しますが省略可能です。MODEについては多重配列の際に説明しますので、しばらくは省略した形で解説を進めていきたいと思います。
1 |
count(要素を数える配列,MODE) |
第二引数のMODEを省略した構文がこちらです。こちらのパターンのほうがよく使われるのではないでしょうか。これだけでも配列の要素数を数えることができます。
1 |
count(要素を数える配列) |
配列の要素数(Array Length)をカウントする
さて、実際にcount関数を使った事例を紹介しましょう。
通常の配列の場合
まずは通常の配列の要素数を数える例を挙げていきます。
以下のように$memberという名前が格納された配列変数があったとします。2行目でcount関数により$memberの要素数を返して$cntに代入しています。その$cntを3行目で出力しているわけです。
1 2 3 |
$member = array("山田", "鈴木", "佐藤", "渡辺", "池田"); $cnt = count($member); echo $cnt . "\n"; |
実行結果はご覧の通りです。$memberには5人の名前が格納されている(=要素数は5)ので、結果は5と出力されます。
1 |
5 |
連想配列の場合
次に連想配列の例を見ていきましょう。
以下のように$memberという連想配列のキーに名前、値に数値(年齢のつもりです)が格納されています。上の例と同じくcount関数により$memberの要素数を$cntに返し、3行目でそれを出力しています。
1 2 3 |
$member = array("山田"=>33, "鈴木"=>42, "佐藤"=>28, "渡辺"=>55, "池田"=>48); $cnt = count($member); echo $cnt . "\n"; |
実行結果は以下のとおりです。通常の配列同様、要素数は5個なので5が出力されました。
1 |
5 |
以上がcount関数の基本的な使い方となります。
要素の数だけループする
count関数の使い方の1つとして、要素の数だけループすることができます。
よく使う方法として以下のようにforeachを使うケースが多いと思います。
1 2 3 4 5 |
$member = array("山田", "鈴木", "佐藤", "渡辺", "池田"); foreach($member as $i => $value){ echo $i ." : ". $value. "\n"; } |
count関数を使うことで全く同じ結果を得ることができます。以下がその例になります。
1 2 3 4 5 |
$member = array("山田", "鈴木", "佐藤", "渡辺", "池田"); for($i=0; $i<count($member); $i++){ echo $i ." : ". $member[$i]. "\n"; } |
結果は以下のとおりです。上の2つの例どちらも同じ結果となります。
1 2 3 4 5 |
0 : 山田 1 : 鈴木 2 : 佐藤 3 : 渡辺 4 : 池田 |
多次元配列のカウント方法
最後に多次元配列のカウント方法について学んでいきましょう。
ここでようやく冒頭で紹介した第二引数(MODE)を使います。構文は以下のとおりです。MODEには1もしくはCOUNT_RECURSIVEを入れます。
1 2 3 4 5 |
count(要素を数える配列,MODE) //1またはCOUNT_RECURSIVE count(要素を数える配列,1) count(要素を数える配列,COUNT_RECURSIVE) |
以下のように多重配列$memberに対し、count関数で要素数を出力します。1つは第二引数なし、もう1つは第二引数にCOUNT_RECURSIVEを指定しています(1でもOKです)。
1 2 3 4 5 |
$member = array(array("鈴木一郎", "鈴木次郎", "鈴木三郎"), array("山田隆", "山田博", "山田清"), array("渡辺健一", "渡辺正二", "渡辺圭三")); echo count($member) . "\n"; echo count($member, COUNT_RECURSIVE) . "\n"; |
結果はご覧のとおりです。第二引数なしの場合は3と出力しますが、第二引数を指定した場合は配列内の配列要素数まで数えてくれるので12と出力されます。
1 2 |
3 12 |
連想配列の場合はどうでしょうか。以下の例のような名前をキーとして、値には年齢や住所、電話番号と言った属性の配列となっています。count関数で1つは第二引数なし、もう1つは第二引数に1を(今度は1にしました)指定して出力します。
1 2 3 4 5 6 7 8 |
$member = array("鈴木一郎" => array("age"=>28, "address"=>"東京都", "tel"=>"03-1111-1111"), "山田太郎" => array("age"=>33, "address"=>"大阪府", "tel"=>"06-2222-1111"), "渡辺隆" => array("age"=>41, "address"=>"北海道", "tel"=>"011-333-1111"), "池田花子" => array("age"=>33, "address"=>"愛知県", "tel"=>"052-444-1111"), "佐藤清" => array("age"=>21, "address"=>"福岡県", "tel"=>"092-555-1111") ); echo count($member) . "\n"; echo count($member, 1) . "\n"; |
結果はご覧の通りです。第二引数なしの場合は5と出力しますが、第二引数を指定した場合は配列内の配列要素数まで数えてくれるので20と出力されます。
1 2 |
5 20 |
まとめ
いかがでしょうか。今回はPHPで配列の要素数をカウントする方法について解説しました。
count関数を用いて単純に配列の要素数を取得するだけでなく、繰り返し処理の際に使う際にも便利です。また、多次元配列で配列の中に存在する配列をもカウントするなど複雑な処理ができることがおわかりいただけたかと思います。
要素数のカウントは様々な状況で使われることがあり、多くのプログラミング言語でも要素数を数える機能が用意されていますが、多重配列のカウントまで数えてくれる機能はあまりないので、PHPの特徴の1つとも言えます。
ぜひ覚えていただきプログラム開発に役立ててください。