PHPで配列の要素数を取得するcount関数などの使い方
はじめに
PHPで配列の要素数を取得するときに使用する関数は、count関数です。本記事では、count関数の使い方について、基本的な要素数の取得やループ処理への利用、多次元配列や連想配列の要素数の取得方法を、使用例と出力結果を合わせて紹介します。本記事の主な焦点はcount関数ですが、それ以外にもPHPには配列に格納されている値のうち、同じ値の数を取得することができるarray_count_values関数があるため、本記事の最後にこちらも紹介します。
ちなみに、PHPにはcount関数と同様の機能をもつsizeof関数があります。sizeof関数は、count関数のエイリアス(「別名」などの意味)であり、後述するモードも利用することができます。
PHPのcount関数の使い方
count関数の書式は以下のとおりです。
count ( $array , mode );
- $array - 配列もしくはCountableオブジェクトを指定します。
- mode - 例を含めて後述しますが、mode引数にCOUNT_RECURSIVEもしくは1を指定すると、再帰的に配列がカウントされます。もし使用しない場合は、省略できます。
count関数を用いた要素数の出力
以下に示す例は、count関数で配列の要素数を取得した値を出力するプログラムです。
<?php $num_arr = array(1, 2, 3, 4, 5); $str_arr = array('あ', 'い', 'う', 'え', 'お'); $arr = array($num_arr, $str_arr); echo count($num_arr) . " "; echo count($str_arr) . " "; echo count($arr); ?>
上記を実行すると、以下のように出力されます。
5 5 2
このようにcount関数を使用することで、配列に格納される型を問わず、その要素数を取得できるので次に紹介するfor文で使用することができます。
count関数をfor文の条件式へ利用
for文の条件式にcount関数を使用すると、配列の要素数を取得してくれるため、事前に要素数を把握しておく必要がありません。count関数を条件式に使用して、先程のプログラムの$num_arrおよび$str_arrから値を取得して表示するプログラムは、以下のとおりです。
<?php $num_arr = array(1, 2, 3, 4, 5); $str_arr = array('あ', 'い', 'う', 'え', 'お'); for ($i = 0; $i < count($num_arr); $i++) { echo $num_arr[$i]; } echo PHP_EOL; for ($j = 0; $j < count($str_arr); $j++) { echo $str_arr[$j]; } ?>
上記を実行すると、以下のように出力されます。
12345 あいうえお
count関数の第2引数のモードの使用方法
「count関数を用いた要素数の出力」で紹介したプログラム中の変数$arrは、$num_arrと$str_arrが格納される多次元配列です。また、$arrにcount関数を使用して取得した要素数は「2」でした。これは$arrに格納された2つの配列の数を表していますが、その2つの配列の要素数までは分かりません。
そこで、書式の説明で示したCOUNT_RECURSIVEを使用します。これを使用したプログラムは以下のとおりです。
<?php $num_arr = array(1, 2, 3, 4, 5); $str_arr = array('あ', 'い', 'う', 'え', 'お'); $arr=array($num_arr,$str_arr); //モード:COUNT_RECURSIVEの使用 $cnt=count($arr,COUNT_RECURSIVE); echo $cnt; ?>
上記を実行すると、以下のように出力されます。
12この12という値は下記のように求められています。
12 = 5 ($num_arrの要素数) + 5 ($str_arrの要素数) + 2 ( $arr中の$num_arrと$str_arr)
連想配列とcount関数およびCOUNT_RECURSIVE
以下のプログラムのように、連想配列もcount関数とCOUNT_RECURSIVEによって取得される値は同じです。
<?php $score = array( 'Aさん' => array('国語' => 83, '数学' => 93, '英語' => 86), 'Bさん' => array('国語' => 96, '数学' => 94, '英語' => 88), 'Cさん' => array('国語' => 88, '数学' => 80, '英語' => 98), ); echo count($score) . "\n"; echo count($score, COUNT_RECURSIVE); ?>
上記を実行すると、以下のように出力されます。
3 12
array_count_values関数の使い方
array_count_values関数の書式は以下のとおりです。
array_count_values ($array);
- $array - 値の数を知りたい配列を指定します。
以下に示す例は、array_count_values関数を使用して重複するアルファベットや数値の数を取得し、出力するプログラムです。
<?php $arr = array( 'a', 'a', 'c', 'b', 'c', 'b', 'b', 'd', 1, 2, 2, 3, 1, 3, 4, 2, 1, 3, 4, 2, 1 ); $acArr = array_count_values($arr); print_r($acArr); ?>
上記を実行すると、以下のように出力されます。この出力結果から分かるように、array_count_values関数を使用すると、配列$arrの値をキー、値の出現回数を値として構成される連想配列が返されます。
Array ( [a] => 2 [c] => 2 [b] => 3 [d] => 1 [1] => 4 [2] => 4 [3] => 3 [4] => 2 )
まとめ
本記事では、PHPにおけるcount関数を使用した、配列の要素数を取得する方法を中心に紹介しました。count関数は、前述したfor文での利用のように便利な関数です。
本記事がcount関数やfor文などを含め、PHPの理解のお役に立てると幸いです。