count

配列または Countable オブジェクトに含まれるすべての要素の数を数える

説明

int count(Countablearray $value, int $mode = COUNT_NORMAL)

配列の場合は、配列の全ての要素を数えます。 Countable インターフェイスを実装したオブジェクトの場合は、 Countable::count の戻り値を返します。

パラメータ

value

配列あるいは Countable オブジェクト。

mode

オプションのmode 引数が COUNT_RECURSIVE (または 1) にセットされた場合、count は再帰的に配列をカウントします。 これは多次元配列の全ての要素をカウントするといった場合に特に有効です。

警告

count は、再帰を検出して無限ループを回避するようになっています。 しかしその場合 (配列の中に自分自身が複数回登場する場合) は毎回 E_WARNING を発行し、期待する結果より大きい数を返します。

戻り値

value の要素の数を返します。 PHP 8.0.0 より前のバージョンでは、 パラメータが配列でもなく Countable インターフェイスを 実装したオブジェクトでもない場合、1 が返されていました。 ただし、valuenull の場合、 0 が返されていました。

変更履歴

バージョン 説明
8.0.0 value パラメータに不正な型を渡した場合に、 TypeError をスローするようになりました。
7.2.0 value パラメータに不正な型を渡した場合に、 警告を発生させるようになりました。

例1 count の例

<?php
$a[0] = 1;
$a[1] = 3;
$a[2] = 5;
var_dump(count($a));

$b[0]  = 7;
$b[5]  = 9;
$b[10] = 11;
var_dump(count($b));
?>

上の例の出力は以下となります。

int(3)
int(3)

例2 Countable|array でない値を渡した場合の count の例 (悪い例です - 真似しないでね!)

<?php
$b[0]  = 7;
$b[5]  = 9;
$b[10] = 11;
var_dump(count($b));

var_dump(count(null));

var_dump(count(false));
?>

上の例の出力は以下となります。

int(3)
int(0)
int(1)

上の例の PHP 7.2 での出力は、このようになります。

int(3)

Warning: count(): Parameter must be an array or an object that implements Countable in … on line 12
int(0)

Warning: count(): Parameter must be an array or an object that implements Countable in … on line 14
int(1)

上の例の PHP 8 での出力は、このようになります。:

int(3)

Fatal error: Uncaught TypeError: count(): Argument #1 ($var) must be of type Countable .. on line 12

例3 再帰的な count の例

<?php
$food = array('fruits' => array('orange', 'banana', 'apple'),
              'veggie' => array('carrot', 'collard', 'pea'));

// recursive count
var_dump(count($food, COUNT_RECURSIVE));

// normal count
var_dump(count($food));

?>

上の例の出力は以下となります。

int(8)
int(2)

例4 Countable オブジェクトの例

<?php
class CountOfMethods implements Countable
{
    private function someMethod()
    {
    }

    public function count(): int
    {
        return count(get_class_methods($this));
    }
}

$obj = new CountOfMethods();
var_dump(count($obj));
?>

上の例の出力は以下となります。

int(2)

参考

  • is_array
  • isset
  • empty
  • strlen
  • is_countable
  • Arrays