"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > PHP에서 날짜별로 배열을 그룹화하는 방법 – 빠른 팁

PHP에서 날짜별로 배열을 그룹화하는 방법 – 빠른 팁

2024-11-03에 게시됨
검색:381

저는 이 기술을 사용하여 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;
}, []); // 



DateTime 개체와 형식 메서드 덕분에 형식 문자열(월은 '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 블레이드를 사용하여 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에 복제되어 있습니다. 침해가 있는 경우, Study_golang@163으로 문의하시기 바랍니다. .com에서 삭제하세요
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3