저는 이 기술을 사용하여 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 개체와 형식 메서드 덕분에 형식 문자열(월은 '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 중국어 웹사이트의 기타 관련 기사를 참조하세요!