私はこの手法を使用して、Inspector ダッシュボードでバグ修正の配列を日付別にグループ化しています。これは他の人にとっても良いコード スニペットのアイデアになると思いました。また、Laravel ブレード テンプレートの実装と、フィルタリングをサポートするより詳細な実装も書きました。
このコードを実装することにしたのは、履歴に基づいてアイテムのリストをスクロールしやすくするためです。
この実装では 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 より大きい要素のみを保持します。この条件は、特定の使用例に基づいて変更できます。
もちろん、インスピレーションを得て、同じ戦略を特定のテクノロジー (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 Collection クラスによって提供される組み込みユーティリティのおかげで、非常に簡単です:
$groupedData = collect($data)->groupBy(function ($item) { return Carbon::parse($item->date)->format('Y-m-d'); });
Linkedin または X で私をフォローしてください。SaaS ビジネスの構築について投稿しています。
Inspector は、ソフトウェア開発者向けに特別に設計されたコード実行監視ツールです。サーバー レベルで何もインストールする必要はありません。composer パッケージ をインストールするだけで準備完了です。
Inspector は非常に簡単で、PHP に優しいです。 Laravel または Symfony パッケージを試すことができます。
HTTP モニタリング、データベース クエリに関する洞察、アラートや通知を好みのメッセージング環境に転送する機能をお探しの場合は、Inspector を無料でお試しください。アカウントを登録してください。
または、Web サイトで詳細をご覧ください: https://inspector.dev
以上がPHP で配列を日付でグループ化する方法 – 簡単なヒントの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。