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

王林
リリース: 2024-09-04 18:31:19
オリジナル
779 人が閲覧しました

私はこの手法を使用して、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;
}, []); // <-- Start with an empty array
ログイン後にコピー

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'));
    }
}
ログイン後にコピー

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

<ul>
    @foreach ($groupedData as $date => $items)
        <li>
            <strong>{{ $date }}</strong>
            <ul>
                @foreach ($items as $item)
                    <li>Value: {{ $item['value'] }}</li>
                @endforeach
            </ul>
        </li>
    @endforeach
</ul>
ログイン後にコピー

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

以上がPHP で配列を日付でグループ化する方法 – 簡単なヒントの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート