【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はいろんな場面で使えそうなので覚えておいて損はなさそうです。