Ich verwende diese Technik, um das Bugfixes-Array im Inspector-Dashboard nach Datum zu gruppieren, und ich dachte, es könnte eine gute Code-Snippet-Idee für andere sein. Ich habe auch eine Implementierung für Laravel-Blade-Vorlagen und eine detailliertere Implementierung geschrieben, die das Filtern unterstützt.
Ich habe mich für die Implementierung dieses Codes entschieden, weil es das Scrollen einer Liste von Elementen basierend auf ihrem Verlauf sehr einfach macht.
Diese Implementierung verwendet die Funktion array_reduce. Es ermöglicht die schrittweise Erstellung eines neuen Arrays, in dem jedes Datum zu einem Schlüssel wird, mit dem entsprechenden Element als Wert.
$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
Dank des DateTime-Objekts und der Formatmethode können Sie die Gruppierungslogik nach Monat oder Jahr anpassen, indem Sie einfach die Formatzeichenfolge ändern: „Y-m“ für Monat oder „Y“ für Jahr.
Sie können auch eine Filterfunktion einführen, um die Elemente zu filtern, bevor Sie sie nach dem Datumsfeld gruppieren.
$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; }, []);
Innerhalb der Rückruffunktion von array_filter() geben wir die Filterbedingung an. In diesem Beispiel behalten wir nur die Elemente bei, bei denen das Feld „Wert“ größer als $filter ist. Sie können diese Bedingung je nach Ihrem spezifischen Anwendungsfall ändern.
Natürlich können Sie sich inspirieren lassen und dieselbe Strategie in Ihrer spezifischen Technologie anwenden (wie Symfony + Twig oder ähnliches).
Um die Datenmanipulationsanweisungen von der Ansicht zu trennen, halte ich den Filter- und Gruppierungsprozess auf Controller-Ebene und implemetiere nur die Datenstrukturiteration auf der Vorlagenseite.
Hier ist der Controller:
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')); } }
Und hier ist die Klingenansicht:
<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>
Dank der integrierten Dienstprogramme der Laravel Collection-Klasse ist es wirklich unkompliziert:
$groupedData = collect($data)->groupBy(function ($item) { return Carbon::parse($item->date)->format('Y-m-d'); });
Sie können mir auf LinkedIn oder X folgen. Ich poste über den Aufbau meines SaaS-Geschäfts.
Inspector ist ein Tool zur Codeausführungsüberwachung, das speziell für Softwareentwickler entwickelt wurde. Sie müssen nichts auf Serverebene installieren, installieren Sie einfach das Composer-Paket und schon kann es losgehen.
Inspector ist super einfach und PHP-freundlich. Sie können unser Laravel- oder Symfony-Paket ausprobieren.
Wenn Sie nach HTTP-Überwachung, Einblicken in Datenbankabfragen und der Möglichkeit suchen, Warnungen und Benachrichtigungen an Ihre bevorzugte Messaging-Umgebung weiterzuleiten, testen Sie Inspector kostenlos. Registrieren Sie Ihr Konto.
Oder erfahren Sie mehr auf der Website: https://inspector.dev
Das obige ist der detaillierte Inhalt vonSo gruppieren Sie Arrays nach Datum in PHP – schnelle Tipps. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!