「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > PHP で配列を日付でグループ化する方法 – 簡単なヒント

PHP で配列を日付でグループ化する方法 – 簡単なヒント

2024 年 11 月 3 日に公開
ブラウズ:250

私はこの手法を使用して、Inspector ダッシュボードでバグ修正の配列を日付別にグループ化しています。これは他の人にとっても良いコード スニペットのアイデアになると思いました。また、Laravel ブレード テンプレートの実装と、フィルタリングをサポートするより詳細な実装も書きました。

このコードを実装することにしたのは、履歴に基づいてアイテムのリストをスクロールしやすくするためです。

純粋な PHP で配列を日付でグループ化する

この実装では array_reduce 関数を使用します。これにより、各日付がキーとなり、対応する要素が値となる新しい配列を段階的に作成できます。

$data = [
    ['date' => '2023-06-01', 'value' => 10],
    ['date' => '2023-06-02', 'value' => 20],
    ['date' => '2023-06-01', 'value' => 30],
    ['date' => '2023-06-03', 'value' => 40],
    ['date' => '2023-06-02', 'value' => 50],
];

$groupedData = array_reduce($data, function ($result, $item) {
    $date = new DateTime($item['date']);
    $formattedDate = $date->format('Y-m-d');

    if (!isset($result[$formattedDate])) {
        $result[$formattedDate] = [];
    }

    $result[$formattedDate][] = $item;

    return $result;
}, []); // 



DateTime オブジェクトと format メソッドのおかげで、形式文字列 (月の場合は「Y-m」、年の場合は「Y」) を変更するだけで、月または年ごとのグループ化ロジックをカスタマイズできます。

フィルタリングとグループ化

日付フィールドでグループ化する前に要素をフィルタリングするフィルター関数を導入することもできます。

$groupedData = array_reduce(array_filter($data, function ($item) use ($filter) {
        // Filter condition: keep elements with value greater than 20
        return $item['value'] > $filter;
    }), 
    function ($result, $item) {
        $date = new DateTime($item['date']);
        $formattedDate = $date->format('Y-m-d');

        if (!isset($result[$formattedDate])) {
            $result[$formattedDate] = [];
        }

        $result[$formattedDate][] = $item;

        return $result;
    }, []);

array_filter()のコールバック関数内にフィルタ条件を指定します。この例では、「値」フィールドが $filter より大きい要素のみを保持します。この条件は、特定の使用例に基づいて変更できます。

Laravel ブレードを使用して UI に結果を表示する

もちろん、インスピレーションを得て、同じ戦略を特定のテクノロジー (Symfony Twig など) で使用することもできます。

データ操作ステートメントをビューから分離しておくために、フィルター処理とグループ化プロセスをコントローラー レベルに保ち、テンプレート側ではデータ構造の反復のみを実装します。

コントローラーは次のとおりです:

namespace App\Http;


use Illuminate\Http\Request;


class DashboardController extends Controller
{
    /**
     * The dashboard.
     *
     * @param ImpersonatesUsers $impersonator
     * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
     */
    public function index(Request $request)
    {
        $data = $this->getData();

        $data = array_reduce(array_filter($data, function ($item) use ($filter) {
            // Filter condition: keep elements with value greater than 20
            return $item['value'] > $filter;
        }), 
        function ($result, $item) {
            $date = new DateTime($item['date']);
            $formattedDate = $date->format('Y-m-d');

            if (!isset($result[$formattedDate])) {
                $result[$formattedDate] = [];
            }

            $result[$formattedDate][] = $item;

            return $result;
        }, []);

        return view('dashboard', compact('data'));
    }
}

これがブレードビューです:

    @foreach ($groupedData as $date => $items)
  • {{ $date }}
      @foreach ($items as $item)
    • Value: {{ $item['value'] }}
    • @endforeach
  • @endforeach

Laravel コレクションを日付ごとにグループ化する

Laravel Collection クラスによって提供される組み込みユーティリティのおかげで、非常に簡単です:

$groupedData = collect($data)->groupBy(function ($item) {
    return Carbon::parse($item->date)->format('Y-m-d');
});

Linkedin または X で私をフォローしてください。SaaS ビジネスの構築について投稿しています。

PHP アプリケーションを無料で監視する

Inspector は、ソフトウェア開発者向けに特別に設計されたコード実行監視ツールです。サーバー レベルで何もインストールする必要はありません。composer パッケージをインストールするだけで準備完了です。

Inspector は非常に簡単で、PHP に優しいです。 Laravel または Symfony パッケージを試すことができます。

HTTP モニタリング、データベース クエリの洞察、アラートや通知を好みのメッセージング環境に転送する機能をお探しの場合は、Inspector を無料でお試しください。アカウントを登録してください。

または、Web サイトで詳細をご覧ください: https://inspector.dev

How to group array by date in PHP – Fast Tips

リリースステートメント この記事は次の場所に転載されています: https://dev.to/inspector/how-to-group-array-by-date-in-php-fast-tips-4oc0?1 侵害がある場合は、study_golang@163 までご連絡ください。 .comを削除してください
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3