」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 如何在 PHP 中按日期對數組進行分組 – 快速提示

如何在 PHP 中按日期對數組進行分組 – 快速提示

發佈於2024-11-03
瀏覽:483

我使用這種技術在檢查器儀表板中按日期對錯誤修復數組進行分組,我認為這對其他人來說可能是一個很好的程式碼片段想法。我還編寫了 Laravel Blade 模板的實作以及支援過濾的更詳細的實作。

我決定實現此程式碼,因為它使專案清單很容易根據其歷史記錄進行捲動。

在純 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()的回呼函數中,我們指定過濾條件。在此範例中,我們僅保留「value」欄位大於 $filter 的元素。您可以根據您的特定用例修改此條件。

使用 Laravel Blade 在 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。註冊您的帳戶。

或在網站上了解更多: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如有侵犯,請聯絡[email protected]刪除
最新教學 更多>

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3