PHPでは、配列(array)の要素を数える機能として、count関数が用意されています。なお、この関数は、for文による繰り返し処理でよく使われる機能です。今回は、PHPを学んでいる方に、このcount関数の基本的な機能と、その使い方について解説します。
目次
配列(array)の個数を数えるcount関数の基本
PHPのプログラムで配列(array)を利用する場合、その要素毎に評価したり、処理することがよくあります。そして、そのようなケースでよく使われる、配列(array)の要素の数を数えるcount関数です。まずは、count関数の基本について解説します。
count関数の文法
今回取り上げるcount関数は、配列(array)またはハッシュ(hash)に含まれる要素の数を数えて、その数を返す関数です。そして、使い方は簡単で、引数に配列(array)またはハッシュ(hash)の変数名を指定
します。
1 2 3 |
count()関数の文法 count( 配列(array)またはハッシュ(hash)の変数名 ) |
なお、多次元配列を指定した場合、その配列(array)名のみ指定するとcount関数、最上位の要素の数を返します。もし、下位の配列に含まれる全ての要素の数を調べたい場合は、第2引数にCOUNT_RECURSIVEオプションを指定
してください。
1 2 3 |
多次元配列に含まれる全ての要素を数える count( 多次元配列の変数名, COUNT_RECURSIVE ) |
もし配列(array)が空なら
先ほど説明したように、count関数は、配列(array)またはハッシュ(hash)に含まれる要素の数を数える関数ですが、要素が全く無い場合でも動作します。その場合は、count関数が返す値は0です。
ただし、count関数は、配列(array)名を指定するのが正しい使い方です。配列(array)の代わりにnullを指定すると、プログラムが正常に動作しないケースもあるので、nullが処理される可能性がある場合は、事前にチェックして使いましょう。
1 2 3 4 5 |
配列の代わりにnullを指定した際のメッセージの例 PHP Warning: count(): Parameter must be an array or an object that inplements Countable in ... on line .. パラメーターは、配列(array)またはCountableが実装されたオブジェクトでなければならない |
sizeof関数も使える
PHPには、count関数と同じ機能の関数として、sizeof関数も用意されており、count関数と同じ文法で使えます。なお、PHPが文法を参考にしたC言語では、配列の要素を数えるのにsizeof演算子を用います。そのため、C言語などの他のプログラミング言語を学んだ方も、PHPが使えるように用意された関数がsizeofです。
sizeof関数の文法
sizeof( 配列(array)またはハッシュ(hash)の変数名 )
なお、sizeof関数は、count関数の別名なので、多次元配列に含まれる全ての要素を数えるための、OUNT_RECURSIVEオプションも指定できます。
sizeof( 多次元配列の変数名, COUNT_RECURSIVE )
count関数を使った簡単な例
先ほど解説したように、count関数は配列(array)やハッシュ(hush)の要素の数を数える関数です。そのため、配列(array)やハッシュ(hush)を扱うPHPのプログラムでは、よく使われる関数の1つと言えるでしょう。次から、このcount関数を使った代表的な使い方を紹介します。
配列(array)の数を数える
次の例は、「a1, a2, a3」の3つの要素を格納した配列(array)の要素数を表示します。
1 2 3 4 |
<?php $arr = [ "a1", "a2", "a3" ]; echo count($arr) . "\n"; ?> |
また、多次元配列に含まれる全ての要素数を調べる場合は、COUNT_RECURSIVEオプションを指定します。
1 2 3 4 5 6 7 8 9 |
<?php $arr = [ "a1", [ "b1", "b2", "b3" ], [ "c1", "c2" ]. "d1" ]; echo count($arr, COUNT_RECURSIV); ?> |
要素数が変動する配列を対象にする
実際のプログラムでは、実行する毎に扱う配列(array)の要素数が変わることがよくあります。また、次に要素数が変動する場合の例として、ファイルから配列(array)に読み込んだ要素数を数えるプログラムの例を紹介します。
1 2 3 4 5 |
$arr = arra(); while(($item = fgets($f)) !== false) { array_push($arr, trim($item)); } $arr_c = count($arr); |
この例では、行数が解らないファイルから要素を$arrに読み込み、$arrの要素の数を$arr_cに格納しています。
配列(array)とcount関数を使ったループの例
count関数がよく使われるのは、for文で作る繰り返し処理です。そして、for文では、下記のように繰り返しの条件にcount関数を使います。
1 2 3 |
for($i=0; $i<count($arr); $++) { echo "No." . strval($i+1) . " : " . $arr[$i] . "\n"; } |
この例では、配列(array)$arrに格納された文字列を、for文で表示する例です。for文を繰り返す上限を、count関数で計算しており、それを数える変数$iを、for文の中でも利用しています。
count関数を使わない繰り返しの作り方
先ほど、count関数を利用したfor文による繰り返しの例を紹介しましたが、PHPには配列(array)を扱う関数が幾つもあり、count関数を使わなくても繰り返し処理をプログラムすることが可能です。次から、その代表的な関数とその使い方について紹介します。
foreachを使う
PHPではfor文と似た繰り返し処理としてforeach文も使えます。そして、foreach文を使えばcount()関数を利用したfor文と同じ処理を作ることが可能です。
1 2 3 4 5 6 7 8 |
count()関数を使ったfor文の例 $match_arr = []; for($i=0; $i<count($arr); $++) { if(! preg_match('/potepan/', $arr[$i] )) { array_push( $match_arr, $arr[$i] ): } } |
上記のfor文による繰り返し処理をforeachで書き換えた例
1 2 3 4 5 6 |
$match_arr = []; foreach( $arr as $item ) { if(! preg_match('/potepan/', $item )) { array_push( $match_arr, $item ): } } |
配列の検索にarray_search()関数を使う
もし、配列(array)に特定の値が含まれているかをチェックする場合、for文とcount関数を組み合わせた組み合わせ処理を、PHPの組込関数のarray_search関数で実現できます。
例えば、配列(array)の$arrに、$keywordに格納された文字列が含まれているかを検索する場合、for文とcount関数を組み合わせても書けますが、array_search関数を使うことで簡潔に記述できます。
1 2 3 4 5 6 7 8 9 |
配列の検索をfor文とcount関数の組み合わせで作った例 $key_no = false; for($i=0; $i<count($arr); $i++) { if( strcmp($arr[$i], $keyword) == 0 ) { $key_no = $i; break; } } |
上のcount関数を利用した処理は、下記のように簡単に記述できます。
1 2 3 |
array_search()関数で配列(array)を検索する例 $key_no = array_serch( $keyword, $arr ); |
まとめ
count関数は、これまで解説したように、配列(array)を扱う際に欠かせない関数の1つです。そして、配列を使ったfor文などの繰り返し処理でよく利用されます。ただし、PHPには配列(array)を扱う便利な関数も用意されています。count関数と配列(array)を扱う関数を上手く利用して、プログラミングに活かしてください。