"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > PHP में तिथि के अनुसार सारणी को समूहित कैसे करें - तेज़ युक्तियाँ

PHP में तिथि के अनुसार सारणी को समूहित कैसे करें - तेज़ युक्तियाँ

2024-11-03 को प्रकाशित
ब्राउज़ करें:685

मैं इस तकनीक का उपयोग इंस्पेक्टर डैशबोर्ड में दिनांक के अनुसार बग फिक्स सरणी को समूहीकृत करने के लिए करता हूं, और मैंने सोचा कि यह दूसरों के लिए एक अच्छा कोड स्निपेट विचार हो सकता है। मैंने लारवेल ब्लेड टेम्प्लेट के लिए एक कार्यान्वयन और फ़िल्टरिंग का समर्थन करने वाला एक अधिक विस्तृत कार्यान्वयन भी लिखा।

मैंने इस कोड को लागू करने का निर्णय लिया क्योंकि यह वस्तुओं की सूची को उनके इतिहास के आधार पर स्क्रॉल करना इतना आसान बनाता है।

शुद्ध 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;
}, []); // 



डेटटाइम ऑब्जेक्ट और प्रारूप विधि के लिए धन्यवाद, आप केवल प्रारूप स्ट्रिंग को बदलकर, महीने या वर्ष के अनुसार समूहीकरण तर्क को अनुकूलित कर सकते हैं: महीने के लिए '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() के कॉलबैक फ़ंक्शन के अंदर, हम फ़िल्टर स्थिति निर्दिष्ट करते हैं। इस उदाहरण में, हम केवल उन तत्वों को रखते हैं जहां 'मान' फ़ील्ड $filter से अधिक है। आप अपने विशिष्ट उपयोग के मामले के आधार पर इस शर्त को संशोधित कर सकते हैं।

लारवेल ब्लेड के साथ यूआई में परिणाम दिखाए जा रहे हैं

जाहिर तौर पर आप प्रेरणा ले सकते हैं और अपनी विशिष्ट तकनीक (जैसे सिम्फनी ट्विग, या इसी तरह) में उसी रणनीति का उपयोग कर सकते हैं।

डेटा हेरफेर कथनों को दृश्य से अलग रखने के लिए मैं नियंत्रक स्तर पर फ़िल्टरिंग और समूहीकरण प्रक्रिया रखता हूं, और मैं टेम्पलेट पक्ष पर केवल डेटा संरचना पुनरावृत्ति लागू करता हूं।

यहाँ नियंत्रक है:

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

लारवेल संग्रह को तिथि के अनुसार समूहित करें

लारवेल कलेक्शन क्लास द्वारा प्रदान की गई अंतर्निहित उपयोगिताओं के लिए धन्यवाद, यह वास्तव में सीधा है:

$groupedData = collect($data)->groupBy(function ($item) {
    return Carbon::parse($item->date)->format('Y-m-d');
});

आप मुझे लिंक्डइन या एक्स पर फ़ॉलो कर सकते हैं। मैं अपना SaaS व्यवसाय बनाने के बारे में पोस्ट करता हूं।

अपने PHP एप्लिकेशन की निःशुल्क निगरानी करें

इंस्पेक्टर एक कोड निष्पादन निगरानी उपकरण है जो विशेष रूप से सॉफ्टवेयर डेवलपर्स के लिए डिज़ाइन किया गया है। आपको सर्वर स्तर पर कुछ भी इंस्टॉल करने की आवश्यकता नहीं है, बस कंपोजर पैकेज इंस्टॉल करें और आप जाने के लिए तैयार हैं।

इंस्पेक्टर बेहद आसान और PHP फ्रेंडली है। आप हमारे लारवेल या सिम्फनी पैकेज को आज़मा सकते हैं।

यदि आप HTTP मॉनिटरिंग, डेटाबेस क्वेरी अंतर्दृष्टि और अपने पसंदीदा मैसेजिंग वातावरण में अलर्ट और सूचनाओं को अग्रेषित करने की क्षमता की तलाश में हैं, तो इंस्पेक्टर को निःशुल्क आज़माएं। अपना खाता पंजीकृत करें।

या वेबसाइट पर अधिक जानें: 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 यदि कोई उल्लंघन है, तो कृपया स्टडी_गोलंग@163 से संपर्क करें इसे हटाने के लिए .com
नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3