配列の場合は、配列の全ての要素を数えます。 Countable インターフェイスを実装したオブジェクトの場合は、 Countable::count() の戻り値を返します。
value
配列あるいは Countable オブジェクト。
mode
オプションのmode
引数が COUNT_RECURSIVE
(または 1) にセットされた場合、count()
は再帰的に配列をカウントします。
これは多次元配列の全ての要素をカウントするといった場合に特に有効です。
count() は、再帰を検出して無限ループを回避するようになっています。
しかしその場合 (配列の中に自分自身が複数回登場する場合) は毎回 E_WARNING
を発行し、期待する結果より大きい数を返します。
value
の要素の数を返します。
PHP 8.0.0 より前のバージョンでは、
パラメータが配列でもなく
Countable インターフェイスを
実装したオブジェクトでもない場合、1
が返されていました。
value
に含まれる要素の数を返します。
ひとつ例外があり、value
が null
の場合、
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)