Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【PHP8.x】count()関数の使い方

count関数の使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

『count関数は、配列やオブジェクトに含まれる要素の数を数える処理を実行する関数です』 この関数は、引数として渡された配列やオブジェクトがいくつの要素を持っているかを整数で返します。主に配列の長さを知りたい場合に使用され、プログラミングにおいて非常に頻繁に利用される基本的な関数の一つです。第二引数に定数 COUNT_RECURSIVE を指定すると、多次元配列の要素を再帰的に数え、入れ子になった配列内の要素もすべて合計した数を返します。この引数を省略した場合は、最上位の次元の要素数のみが数えられます。また、Countableインターフェースを実装したオブジェクトに対しても使用でき、そのオブジェクトが持つ要素数を取得することが可能です。ただし、Countableを実装していないオブジェクトを渡した場合、PHP 8.0以降ではエラーが発生するため注意が必要です。引数がnullの場合は0を返し、その他の数えられない値が指定された場合は1を返します。

構文(syntax)

1count(Countable|array $value, int $mode = COUNT_NORMAL): int

引数(parameters)

Countable|array $value, int $mode = COUNT_NORMAL

  • Countable|array $value: 要素数を数えたい配列またはCountableインターフェースを実装したオブジェクト
  • int $mode = COUNT_NORMAL: 数え方(COUNT_NORMAL: 通常モード、COUNT_RECURSIVE: 再帰モード)

戻り値(return)

int

count() 関数は、配列またはカウント可能なオブジェクトに含まれる要素の数を整数で返します。

サンプルコード

PHP count() で Countable オブジェクトを数える

1<?php
2
3/**
4 * MyCollectionクラスは、Countableインターフェースを実装しています。
5 * これにより、このクラスのインスタンスがPHPの組み込み関数である`count()`によって
6 * その内部の要素数を数えられるようになります。
7 */
8class MyCollection implements Countable
9{
10    /**
11     * @var array コレクションの要素を格納するプライベート配列
12     */
13    private array $items = [];
14
15    /**
16     * コレクションに新しい要素を追加します。
17     *
18     * @param mixed $item 追加する要素
19     */
20    public function add(mixed $item): void
21    {
22        $this->items[] = $item;
23    }
24
25    /**
26     * Countableインターフェースを実装するために必須のメソッドです。
27     * このメソッドは、コレクション内の要素の総数を返します。
28     *
29     * @return int コレクション内の要素の総数
30     */
31    public function count(): int
32    {
33        // 内部の配列の要素数を返す
34        return \count($this->items);
35    }
36}
37
38// MyCollectionクラスのインスタンスを作成
39$myCollection = new MyCollection();
40
41// コレクションに要素を追加
42$myCollection->add('PHP');
43$myCollection->add('Python');
44$myCollection->add('Java');
45$myCollection->add('JavaScript');
46
47// count()関数を使用してMyCollectionオブジェクトの要素数を取得
48// MyCollectionがCountableインターフェースを実装しているため、オブジェクトを直接数えることができます。
49echo "MyCollectionの要素数: " . \count($myCollection) . "\n";
50
51// 参考: 通常の配列に対するcount()関数の使用例
52$myArray = ['りんご', 'バナナ', 'オレンジ'];
53echo "通常の配列の要素数: " . \count($myArray) . "\n";
54
55?>

PHPのcount()関数は、配列またはCountableインターフェースを実装したオブジェクトの要素数を取得するための組み込み関数です。

この関数は第一引数に数えたい対象を受け取ります。配列を渡した場合はその要素数を、Countableインターフェースを実装したオブジェクトを渡した場合は、そのオブジェクトが定義する要素数を返します。第二引数$modeは省略可能で、デフォルト値であるCOUNT_NORMALは、多次元配列の場合でもネストされた要素を数えずに、直下の要素のみをカウントします。戻り値は常に要素の総数を示す整数値となります。

サンプルコードでは、MyCollectionクラスがCountableインターフェースを実装しています。Countableインターフェースを実装することで、そのクラスのインスタンスをPHPのcount()関数に直接渡せるようになります。MyCollectionクラスは、Countableインターフェースが要求するcount()メソッドを独自に定義しており、自身の内部に持つ配列$itemsの要素数を返しています。これにより、$myCollectionオブジェクトに対して\count($myCollection)と呼び出すだけで、追加された要素の総数を簡単に取得できます。

また、count()関数は$myArrayのような通常のPHP配列に対しても同様に機能し、配列に含まれる要素の数を正確に返します。このように、count()関数はPHPプログラミングにおいて、データ構造のサイズを把握するための基本的ながら非常に重要な役割を果たします。

PHPのcount()関数は、配列だけでなく、Countableインターフェースを実装したオブジェクトの要素数も数えられます。オブジェクトをcount()で数えるには、そのクラスでCountableインターフェースを実装し、public function count(): intメソッドを定義することが必須です。このメソッド内で、実際に数えたい要素数を返すロジックを記述してください。クラス内に同名のcount()メソッドがある場合、グローバルなcount()関数を呼び出す際は、\count()のようにバックスラッシュを付けて明示的に呼び出すと、意図しないメソッド呼び出しを防げます。count()関数に数えられない値(例えばnullや整数)を渡すと、実行時にエラーとなるため注意が必要です。常にCountableオブジェクトまたは配列を渡すようにしてください。

php count(null) は 0 を返す

1<?php
2
3/**
4 * PHPのcount関数がnull値をどのように扱うかを示すサンプルコード。
5 *
6 * PHP 8.0以降のバージョンでは、count関数は通常、配列またはCountableインターフェースを
7 * 実装したオブジェクト以外の値に対してTypeErrorをスローします。
8 * しかし、null値については特別な挙動として、TypeErrorをスローせずに0を返します。
9 * この挙動はPHP 7.2以降で一貫しており、PHP 8.4でも同様です。
10 */
11
12// null値を変数に代入します。
13$nullValue = null;
14
15// count関数にnull値を渡した場合の結果を出力します。
16// 期待される結果は常に 0 です。
17echo "count(null) の結果: " . count($nullValue) . "\n";
18
19?>

PHPのcount関数は、配列やCountableインターフェースを実装したオブジェクトの要素数を数えるための関数です。引数$valueには数えたい対象を渡し、その要素数が整数型(int)として戻り値で返されます。$mode引数は省略可能で、通常は使用しません。

PHP 8.0以降のバージョンでは、count関数は原則として配列やCountableインターフェースを実装したオブジェクト以外の値が渡された場合、TypeErrorをスローします。しかし、null値については特別な挙動が定義されており、TypeErrorを発生させることなく常に0を返します。このnull値に対する挙動はPHP 7.2以降で一貫しており、PHP 8.4でも同様です。

サンプルコードは、このnull値に対するcount関数の特別な挙動を示すものです。変数にnullを代入し、それをcount関数に渡すことで、結果として0が出力されることを確認できます。これにより、null値が渡される可能性がある場合でも、別途エラーハンドリングを記述することなく安全に要素数を0として扱えるため、コードの記述を簡潔に保つことができます。

count関数は、主に配列やCountableインターフェースを実装したオブジェクトの要素数を数えるために使用されます。PHP 8.0以降では、これらの型ではない値を引数に渡すと、通常はTypeErrorが発生しますので注意が必要です。しかし、null値については例外的な扱いとなり、TypeErrorを発生させずに常に0を返します。このnull値に対する特別な挙動はPHP 7.2以降で一貫しており、PHP 8.4でも同様です。この特性を理解しておくことで、意図せずnullが渡された場合でもプログラムが予期せず停止するのを避け、安全に処理を継続できます。

PHP countで多次元配列の要素数を数える

1<?php
2
3// 多次元配列を定義します。
4// この配列には、複数の階層を持つ要素が含まれています。
5$multiDimensionalArray = [
6    'fruits' => ['apple', 'banana', 'orange'],
7    'vegetables' => ['carrot', 'potato'],
8    'meat' => 'chicken',
9    'drinks' => [
10        'water',
11        'juice' => ['apple juice', 'orange juice']
12    ]
13];
14
15// 配列の内容を整形して出力し、その構造を視覚的に確認します。
16echo "--- 多次元配列の内容 ---\n";
17print_r($multiDimensionalArray);
18echo "----------------------\n\n";
19
20// count() 関数を COUNT_NORMAL (デフォルト) モードで呼び出します。
21// このモードでは、配列の第一階層にある要素のみが数えられます。
22// 例: $multiDimensionalArray は 'fruits', 'vegetables', 'meat', 'drinks' の4つの要素を直接持ちます。
23$normalCount = count($multiDimensionalArray, COUNT_NORMAL);
24echo "COUNT_NORMAL で数えた要素数 (第一階層のみ): " . $normalCount . "\n"; // 出力例: 4
25
26echo "\n";
27
28// count() 関数を COUNT_RECURSIVE モードで呼び出します。
29// このモードでは、配列とそのすべてのサブ配列(入れ子になった配列)に含まれる要素の合計数が再帰的に数えられます。
30//
31// 計算の内訳:
32// - 最上位の要素数: 4 ('fruits', 'vegetables', 'meat', 'drinks')
33// - 'fruits' 配列内の要素数: 3 ('apple', 'banana', 'orange')
34// - 'vegetables' 配列内の要素数: 2 ('carrot', 'potato')
35// - 'drinks' 配列内の要素数: 2 ('water', 'juice')
36// - 'drinks' -> 'juice' 配列内の要素数: 2 ('apple juice', 'orange juice')
37// 合計: 4 + 3 + 2 + 2 + 2 = 13
38$recursiveCount = count($multiDimensionalArray, COUNT_RECURSIVE);
39echo "COUNT_RECURSIVE で数えた要素数 (すべての階層の合計): " . $recursiveCount . "\n"; // 出力例: 13
40

PHPのcount関数は、配列やCountableインターフェースを実装したオブジェクトの要素数を数えるために使用されます。引数$valueには数えたい対象の配列またはCountableオブジェクトを渡し、戻り値として要素の合計数を表す整数が返されます。

この関数にはオプションの引数$modeがあり、要素の数え方を指定できます。デフォルト値のCOUNT_NORMALでは、対象の配列の第一階層にある要素のみを数えます。例えば、サンプルコードで定義された多次元配列$multiDimensionalArrayCOUNT_NORMALモードで数えると、最上位の要素である'fruits', 'vegetables', 'meat', 'drinks'の4つが数えられ、結果は「4」となります。

一方、$modeCOUNT_RECURSIVEを指定すると、配列の第一階層だけでなく、その中に入れ子になっているすべてのサブ配列の要素も再帰的に合計して数えます。サンプルコードでは、最上位の4つの要素に加え、'fruits'内の3つ、'vegetables'内の2つ、'drinks'内の2つ、さらに'drinks'のサブ配列である'juice'内の2つをすべて合計し、結果は「13」となります。このようにcount関数は、配列の構造を把握し、プログラム内で配列の大きさを確認する際に非常に便利です。

PHPのcount関数は、第二引数$modeによって数える範囲が大きく異なりますので注意が必要です。デフォルトのCOUNT_NORMALは、多次元配列であっても第一階層の要素数のみを数えます。そのため、配列全体の要素を数えたい場合は、必ずCOUNT_RECURSIVEを指定してください。COUNT_RECURSIVEは、配列とその内部のすべてのサブ配列に含まれる要素の合計数を再帰的に数え上げます。また、count関数は配列だけでなく、Countableインターフェースを実装したオブジェクトの要素数も取得可能です。引数には配列またはCountableオブジェクトを渡す必要があります。これら以外の値を渡すと、PHP 8では警告が発生しつつも0を返すことがありますので、意図しない挙動を防ぐためにも、事前に引数の型を確認することをお勧めします。

PHP count関数で配列要素数を数える

1<?php
2
3/**
4 * PHPのcount()関数の基本的な使用例を示します。
5 * この関数は、配列やCountableインターフェースを実装したオブジェクトの要素数を数えます。
6 * システムエンジニアを目指す初心者向けに、最も一般的な配列での使用例に焦点を当てています。
7 */
8function demonstrateCountFunction(): void
9{
10    // 1. 通常の数値インデックス配列の要素数を数える
11    $fruits = ["apple", "banana", "cherry"];
12    // count()関数は配列$fruitsの要素数を返します。
13    $numberOfFruits = count($fruits);
14    echo "フルーツの数: " . $numberOfFruits . "\n"; // 出力例: フルーツの数: 3
15
16    // 2. 連想配列の要素数を数える
17    $userProfile = [
18        "name" => "Alice",
19        "age" => 30,
20        "city" => "Tokyo"
21    ];
22    // 連想配列の場合も、キーと値のペアの数を数えます。
23    $numberOfProperties = count($userProfile);
24    echo "ユーザープロフィールのプロパティ数: " . $numberOfProperties . "\n"; // 出力例: ユーザープロフィールのプロパティ数: 3
25
26    // 3. 空の配列の要素数を数える
27    $emptyList = [];
28    // 空の配列の場合、count()関数は0を返します。
29    $numberOfEmptyItems = count($emptyList);
30    echo "空のリストの要素数: " . $numberOfEmptyItems . "\n"; // 出力例: 空のリストの要素数: 0
31
32    // 4. 多次元配列のトップレベル要素数を数える
33    // count()関数のデフォルト動作 (COUNT_NORMAL) では、ネストされた配列自体が1つの要素として数えられます。
34    $nestedData = [
35        "item_a",
36        ["sub_item_1", "sub_item_2"], // この配列全体が1つの要素として数えられる
37        "item_b"
38    ];
39    $numberOfTopLevelItems = count($nestedData);
40    echo "多次元配列のトップレベル要素数: " . $numberOfTopLevelItems . "\n"; // 出力例: 多次元配列のトップレベル要素数: 3
41}
42
43// 上記で定義した関数を実行し、結果を表示します。
44demonstrateCountFunction();
45

PHPのcount()関数は、配列やCountableインターフェースを実装したオブジェクトが持つ要素の数を数え、その合計を整数値として返すために利用されます。この関数は、第一引数に要素数を数えたい対象(配列やオブジェクト)を受け取ります。第二引数はオプションで数え方を指定できますが、通常は省略され、デフォルトのCOUNT_NORMAL(通常の数え方)が適用されます。

例えば、["apple", "banana", "cherry"]という3つの要素を持つ配列にcount()を使うと、3という結果が得られます。["name" => "Alice", "age" => 30, "city" => "Tokyo"]のような連想配列の場合でも、キーと値のペアの数を数えて3を返します。もし配列が[]のように空であれば、count()0を返します。

多次元配列の場合、count()関数のデフォルト動作では、ネストされた配列自体が1つの要素として数えられます。例えば、["item_a", ["sub_item_1", "sub_item_2"], "item_b"]という配列では、["sub_item_1", "sub_item_2"]全体が1つの要素と見なされるため、トップレベルの要素数である3が返されます。このように、count()関数はPHPで配列やコレクションの要素数を手軽に確認するための、非常に重要で便利な関数です。

PHPのcount関数は、配列やCountableインターフェースを実装したオブジェクトの要素数を数えます。サンプルコードのように多次元配列の要素数を数える場合、デフォルトではトップレベルの要素数のみを返します。ネストされた要素もすべて含めて数えたい場合は、第二引数にCOUNT_RECURSIVEを指定してください。空の配列を渡すと0を返します。また、配列やCountableオブジェクト以外の値を引数に渡すと、PHP 8.0以降ではTypeErrorが発生するため、引数の型には十分注意して利用してください。

関連コンテンツ

関連プログラミング言語