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

【PHP8.x】COUNT_NORMAL定数の使い方

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

作成日: 更新日:

基本的な使い方

COUNT_NORMAL定数は、PHPの組み込み定数の一つで、主に配列やオブジェクトの要素数を数えるcount()関数で使用されるモードを表す定数です。

この定数は、count()関数の第2引数に渡すことで、配列の要素を「通常の方法」で数えることを明示的に指定します。具体的には、対象となる配列の最上位の要素のみを数え上げ、配列内にさらに別の配列(多次元配列)が含まれている場合でも、その内部の要素は個別に数えません。多次元配列であっても、外側の配列の1つの要素としてカウントされるだけです。

これはcount()関数のデフォルトの挙動であり、第2引数を省略した場合と同じ結果をもたらします。例えば、$array = ['a', 'b', ['c', 'd']];という配列があった場合、count($array, COUNT_NORMAL)と実行すると、結果は3となります。これは、'a''b'、そして['c', 'd']という3つの要素が存在するためです。

COUNT_NORMALは、ネストされた配列のすべての要素を再帰的に数え上げるCOUNT_RECURSIVE定数と対をなすものであり、配列の深さを考慮せず、表層的な要素数を知りたい場合に利用されます。プログラムの意図を明確にするために、明示的に指定することが推奨される場合があります。

構文(syntax)

1<?php
2
3$array = [1, 2, 3, [4, 5]];
4echo count($array, COUNT_NORMAL);
5
6?>

引数(parameters)

引数なし

引数はありません

戻り値(return)

int

COUNT_NORMALは、配列やTraversableオブジェクトの要素数をカウントする際に、再帰的にカウントしないことを指定するための定数です。この定数が指定された場合、配列やTraversableオブジェクトの直下の要素数のみが返されます。

サンプルコード

PHP count() nullとCOUNT_NORMALの挙動

1<?php
2
3/**
4 * PHPの count() 関数と COUNT_NORMAL 定数、および null 値に対する挙動を示すサンプルコード。
5 *
6 * count() 関数は、配列や Countable インターフェースを実装したオブジェクトの要素数を返します。
7 * COUNT_NORMAL は count() 関数のデフォルトの挙動を示し、配列の最上位の要素のみを数えます。
8 * PHP 7.2 以降では、count() 関数に null を渡すと 0 を返します。
9 */
10function demonstrateCountBehavior(): void
11{
12    echo "--- count() と null の挙動 ---\n";
13
14    // null 値に対して count() 関数を適用
15    // PHP 7.2 以降では、null を数えようとすると 0 を返します。
16    $nullValue = null;
17    $countOfNull = count($nullValue);
18    echo "null の要素数 (count(\$nullValue)): " . $countOfNull . " (PHP 8 では 0 を返します)\n";
19
20    echo "\n--- count() と COUNT_NORMAL 定数の挙動 ---\n";
21
22    // 通常の配列の要素数を数える
23    // COUNT_NORMAL 定数は、count() 関数が配列の最上位の要素のみを数えることを明示します。
24    // これは count() 関数のデフォルトの挙動であるため、通常は定数を省略しても同じ結果になります。
25    $simpleArray = ['apple', 'banana', 'cherry'];
26    $countOfSimpleArray = count($simpleArray, COUNT_NORMAL);
27    echo "シンプルな配列の要素数 (count(\$simpleArray, COUNT_NORMAL)): " . $countOfSimpleArray . "\n"; // 出力: 3
28
29    // 多次元配列の最上位要素を数える場合
30    // COUNT_NORMAL は内部の配列の中身までは数えません。
31    $multiDimensionalArray = [
32        'fruit' => ['apple', 'banana'],
33        'vegetable' => ['carrot', 'potato'],
34        'other'
35    ];
36    $countOfMultiDimensionalArray = count($multiDimensionalArray, COUNT_NORMAL);
37    echo "多次元配列の最上位要素数 (count(\$multiDimensionalArray, COUNT_NORMAL)): " . $countOfMultiDimensionalArray . "\n"; // 出力: 3 ('fruit', 'vegetable', 'other')
38}
39
40// 関数を実行して結果を表示
41demonstrateCountBehavior();

PHP 8におけるcount()関数とCOUNT_NORMAL定数、そしてnull値に対する挙動について解説します。

count()関数は、引数として渡された配列やCountableインターフェースを実装したオブジェクトの要素数を数え、その結果を整数値で返します。

まず、null値に対してcount()関数を適用した場合です。PHP 7.2以降のバージョンでは、nullを渡すと要素数として0が返されます。サンプルコードのnullValuenullを設定しcount()を呼び出すと、「nullの要素数: 0」と表示されます。これは、nullがいかなる要素も持たないと判断されるためです。

次に、COUNT_NORMAL定数についてです。この定数はint型の値で、count()関数の第2引数として使用し、配列の要素数を数える際の挙動を明示します。COUNT_NORMALは、配列の最上位の要素のみを数えることを指定します。これはcount()関数のデフォルトの挙動であるため、通常は定数を省略しても同じ結果になります。

サンプルコードでは、['apple', 'banana', 'cherry']のようなシンプルな配列にcount(..., COUNT_NORMAL)を適用すると、3が出力されます。また、多次元配列['fruit' => [...], 'vegetable' => [...], 'other']に対してCOUNT_NORMALを使用すると、内部の配列の中身は数えずに、最上位の要素(fruitvegetableother)のみを数えるため、3が返されます。

PHPのcount()関数にnull値を渡した場合、PHP 7.2以降では0を返しますが、それ以前のバージョンでは警告を発生させて0を返します。ご自身のPHPバージョンを確認し、意図しない挙動にならないよう注意しましょう。変数がnullになる可能性がある場合は、事前にチェックするか、この挙動を理解した上で利用してください。

COUNT_NORMAL定数は、count()関数で配列の最上位の要素のみを数えることを明示するもので、count()関数のデフォルトの挙動と同じです。そのため、通常は省略しても同じ結果が得られます。多次元配列であっても、この定数を用いると内部の配列の中身までは数えられないことを覚えておきましょう。

PHP COUNT_NORMALで空配列の要素をカウントする

1<?php
2
3/**
4 * COUNT_NORMAL 定数と count() 関数を使用して、空の要素数をカウントする方法を示します。
5 *
6 * COUNT_NORMAL は count() 関数の第2引数として使用できる定数で、
7 * デフォルトの動作である「非再帰的なカウント」を明示的に指定します。
8 * 配列や Countable オブジェクトのトップレベルの要素数のみを数えます。
9 *
10 * この例では、空の配列に対して count() を実行し、結果が '0' になることを示します。
11 */
12function demonstrateCountNormalWithEmptyArray(): void
13{
14    // 空の配列を定義します。
15    $emptyArray = [];
16
17    // 1. count() 関数を通常の引数で呼び出し、要素数を取得します。
18    //    第2引数を省略した場合、COUNT_NORMAL がデフォルトで使用されます。
19    $countResultDefault = count($emptyArray);
20    echo "count(\$emptyArray) の結果: " . $countResultDefault . "\n"; // 結果は 0
21
22    // 2. count() 関数を COUNT_NORMAL 定数を明示的に指定して呼び出し、要素数を取得します。
23    //    これは上記のデフォルトの呼び出しと全く同じ結果になります。
24    $countResultNormal = count($emptyArray, COUNT_NORMAL);
25    echo "count(\$emptyArray, COUNT_NORMAL) の結果: " . $countResultNormal . "\n"; // 結果は 0
26
27    echo "\n";
28    echo "上記の結果が示すように、count() 関数は空の配列に対して '0' を返します。\n";
29    echo "COUNT_NORMAL 定数を明示的に指定しても、その動作は変わりません。\n";
30    echo "これは、配列内に要素が一つも存在しないことを正確に表しています。\n";
31}
32
33// 関数を実行して、COUNT_NORMAL 定数の動作と count() の結果を確認します。
34demonstrateCountNormalWithEmptyArray();
35
36?>

PHPのCOUNT_NORMAL定数は、配列やCountableインターフェースを実装したオブジェクトの要素数を数えるcount()関数と組み合わせて使用される定数です。この定数自体に引数はなく、count()関数の第2引数として利用され、戻り値は整数型です。COUNT_NORMALを指定することは、count()関数がデフォルトで行う「非再帰的なカウント」、つまり配列のトップレベルの要素のみを数える動作を明示的に示すことを意味します。

このサンプルコードでは、COUNT_NORMAL定数とcount()関数が空の配列に対してどのように機能するかを具体的に示しています。最初に、要素を持たない空の配列$emptyArrayを定義します。次に、この空の配列に対してcount()関数を呼び出します。一つ目の呼び出しでは第2引数を省略していますが、これはCOUNT_NORMALがデフォルトで使用されるため、非再帰的なカウントが適用されます。二つ目の呼び出しでは、COUNT_NORMAL定数を明示的に指定しています。どちらの呼び出しも、結果として0を返します。これは、count()関数が空の配列の要素数を正確に0と認識し、COUNT_NORMALを明示してもその動作が変わらないことを明確に表しています。

COUNT_NORMAL定数は、count()関数が配列のトップレベル要素のみを数える「非再帰的な」デフォルト動作を明示的に指定するものです。サンプルコードのようにcount()関数の第2引数を省略した場合でも、内部的にはこのCOUNT_NORMALが適用され、明示的に指定した場合と同じ結果が得られます。

空の配列に対してcount()関数を実行した結果が0になるのは、配列に要素が一つも存在しないことを正確に示しており、正常な動作ですのでご安心ください。

PHP 8以降では、count()関数は配列やCountableインターフェースを実装したオブジェクト以外に適用すると、TypeErrorを発生させる場合があるため注意が必要です。このサンプルコードのように配列に適用している場合は安全ですが、他の型の変数に適用する際は、その変数が「数えられるもの」であるか事前に確認することが重要です。

関連コンテンツ

関連プログラミング言語