”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 如何在 PHP 中按日期对数组进行分组 – 快速提示

如何在 PHP 中按日期对数组进行分组 – 快速提示

发布于2024-11-03
浏览:682

我使用这种技术在检查器仪表板中按日期对错误修复数组进行分组,我认为这对其他人来说可能是一个很好的代码片段想法。我还编写了 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