支援対象地域:札幌、仙台、関東、愛知、関西、広島、福岡

  • TOP
  •   
  • コラム
  •   
  • PHPで配列の要素数を取得するcou

はじめに

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の理解のお役に立てると幸いです。