プログラミングは面白い

プログラミングの事を中心に色々書いていきます

【PHP】array_count_values関数

月別アーカイブを作ってる時にこの関数めっちゃ便利だったのでご紹介。

配列の値をキーとして、値の個数をカウントして連想配列にしてくれる関数です。
PHP: array_count_values - Manual

月別アーカイブを作成時、一度すべての記事作成日時をcreated_atカラムから取り出し配列に入れたのですが、ここから重複を省いてカウントする方法ないかなーと探していたらドンピシャこの関数がありました。

    private function archive() {
        // 月別アーカイブ処理
        $posts = Post::all(); // DBから全ファイル取得

        $monthList = []; // 空リスト作成
        // ループで空リストに追加
        foreach($posts as $post) { 
            $monthList[] = $post->created_at->format("Y-m");
        }
        // array_count_valuesを使って連想配列化
        $countArray = array_count_values($monthList);

        return $countArray;
    }

あとはビュー側で中身を取り出して表示さればOKですね。
てかこれ書いてて思ったのですが、ループさせなくてもモデルの操作で日付のデータを配列で取得出来たような…
ちょっと後でやってみようかな。

array_count_valuesはいろんな場面で使えそうなので覚えておいて損はなさそうです。