我使用這種技術在檢查器儀表板中按日期對錯誤修復數組進行分組,我認為這對其他人來說可能是一個很好的程式碼片段想法。我還編寫了 Laravel Blade 模板的實作以及支援過濾的更詳細的實作。
我決定實現此程式碼,因為它使專案清單可以根據其歷史記錄輕鬆滾動。
此實作使用 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()的回呼函數中,我們指定過濾條件。在此範例中,我們僅保留「value」欄位大於 $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。註冊您的帳戶。
或在網站上了解更多:https://inspector.dev
以上是如何在 PHP 中按日期對數組進行分組 – 快速提示的詳細內容。更多資訊請關注PHP中文網其他相關文章!