uiuifree.com

- サイト制作のノウハウと最適化を目指して-

2020.11.15【PHP】配列の要素数を取得するcount関数を使う方法

【PHP】配列の要素数を取得するcount関数を使う方法

    PHPで配列の要素数を取得したい時に使えるcount関数は、配列の長さを確認したり再起的に要素数があるか確認することができます。

    count関数の使い方

    配列にに含まれる要素の数やCountable Interfaceを継承したオブジェクトのcountメソッドを返します。

    count関数
    count ( mixed $array_or_countable [, int $mode = COUNT_NORMAL ] ) : int
    パラメータ
    array_or_countable 配列あるいは Countable オブジェクト
    mode COUNT_RECURSIVEの場合、再起的に配列をカウント

    配列の要素数を取得

    配列で文字列の長さを取得するためにcount関数を使ってみましょう。

    配列の長さを取得

    countの引数を指定しない場合は、配列に入ってる要素の数がカウントされます。

    count
    $items = [
        'PHP',
        'Ruby',
        'Front' => [
            'HTML',
            'CSS',
        ]
    ];
    var_dump(count($items));
    実行結果
    int(3)

    php ruby Frontの3要素の数がカウントされて3が出力されました。

    変数に含まれる全ての配列要素をカウントする

    配列の値にさらに配列が入ってる構造で全ての配列の要素数を取得したい場合は引数にCOUNT_RECURSIVEを設定することで再起的に配列の要素数を取得することができます。

    COUNT_RECURSIVE
    $items = [
        'PHP',
        'Ruby',
        'Front' => [
            'HTML',
            'CSS',
        ]
    ];
    var_dump(count($items,COUNT_RECURSIVE));
    
    実行結果
    int(5)
    

    php ruby Front HTML CSSの5要素の数がカウントされて5が出力されました。

    オブジェクトでの要素数を取得

    PHPでは独自クラスにもcount関数を適用することができます。 Classを実装するときに Countable を実装することで、countで呼び出された時の挙動を定義することができます。

    countの引数にインスタンスを指定

    独自クラスにcountを実装する例を紹介していきます、クラスにcountメソッドを定義してください。
    グローバル関数のcountから呼び出された場合に独自クラスのcountメソッドの返り値を参照することができます。

    class SampleClass implements Countable
    {
        protected $count = 1;
    
        public function count()
        {
            return $this->count++;
        }
    }
    
    $sample = new SampleClass();
    for ($i = 1; $i <= 5; $i++) {
        var_dump(count($sample));
    }
    

    まとめ

    PHPにおけるcount関数の様々な使い方を紹介しました。実務では配列の要素数を取得してバリデーションチェックなど実装したりできます。配列の要素数を取得したい場合はcountを使うと覚えておいてください。

    目次
    PROFILE

    このサイトを運営してるuiuifreeです。
    渋谷のベンチャー企業で2年ほど新規事業を担当した後にフリーランスエンジニアにキャリア転換。
    求人サイトの開発が多くエンジニア/看護師/保育士などの分野でサイトを運営しています。

    アウトプット中の技術

    リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)