खोज…


वाक्य - विन्यास

  • $ संग्रह = संग्रह (['Value1', 'Value2', 'Value3']); // कुंजी 0, 1, 2, ..., के लिए डिफ़ॉल्ट है

टिप्पणियों

Illuminate\Support\Collection डेटा के सरणियों से निपटने के लिए एक धाराप्रवाह और सुविधाजनक इंटरफ़ेस प्रदान करता है। आपने अच्छी तरह से बिना जाने-समझे इनका उपयोग किया होगा, उदाहरण के लिए, कई रिकॉर्ड लाने वाले मॉडल क्वेरीज़ Illuminate\Support\Collection का एक उदाहरण लौटाते हैं।

संग्रह पर अद्यतित दस्तावेज़ के लिए आप यहाँ आधिकारिक दस्तावेज़ पा सकते हैं

संग्रह बनाना

collect() सहायक का उपयोग करके, आप आसानी से एक सरणी में पास करके नए संग्रह उदाहरण बना सकते हैं:

$fruits = collect(['oranges', 'peaches', 'pears']);

यदि आप सहायक कार्यों का उपयोग नहीं करना चाहते हैं, तो आप सीधे कक्षा का उपयोग करके एक नया संग्रह बना सकते हैं:

$fruits = new Illuminate\Support\Collection(['oranges', 'peaches', 'pears']);

जैसा कि टिप्पणी में उल्लेख किया गया है, डिफ़ॉल्ट रूप से मॉडल एक Collection उदाहरण लौटाते हैं, हालांकि आप आवश्यकतानुसार अपने स्वयं के संग्रह बनाने के लिए स्वतंत्र हैं। यदि कोई सरणी निर्माण पर निर्दिष्ट नहीं है, तो एक खाली संग्रह बनाया जाएगा।

कहाँ पे()

आप where() विधि का उपयोग करके किसी संग्रह से कुछ वस्तुओं का चयन कर सकते हैं।

$data = [
    ['name' => 'Taylor',  'coffee_drinker' => true],
    ['name' => 'Matt', 'coffee_drinker' => true]
];

$matt = collect($data)->where('name', 'Matt');

यह बिट कोड उस संग्रह से सभी आइटम का चयन करेगा जहां नाम 'मैट' है। इस स्थिति में, केवल दूसरा आइटम वापस किया जाता है।

घोंसला करने की क्रिया

लारवेल के अधिकांश सरणी तरीकों की तरह, where() नेस्टेड तत्वों के लिए भी खोज का समर्थन करता है। चलो दूसरी सरणी जोड़कर ऊपर दिए गए उदाहरण का विस्तार करें:

$data = [
    ['name' => 'Taylor',  'coffee_drinker' => ['at_work' => true, 'at_home' => true]],
    ['name' => 'Matt', 'coffee_drinker' => ['at_work' => true, 'at_home' => false]]
];

$coffeeDrinkerAtHome = collect($data)->where('coffee_drinker.at_home', true);

यह केवल टेलर को लौटाएगा, क्योंकि वह घर पर कॉफी पीता है। जैसा कि आप देख सकते हैं, घोंसले का समर्थन डॉट-नोटेशन का उपयोग करके किया जाता है।

परिवर्धन

सरणियों के बजाय वस्तुओं का एक संग्रह बनाते समय, उन्हें where() उपयोग करके फ़िल्टर किया जा सकता है। संग्रह तब सभी इच्छित गुणों को प्राप्त करने का प्रयास करेगा।

5.3

कृपया ध्यान दें, कि Laravel 5.3 के बाद से where() विधि डिफ़ॉल्ट रूप से मानों की तुलना करने की कोशिश करेगी। इसका मतलब है कि (int)1 खोज करते समय, '1' वाली सभी प्रविष्टियाँ भी वापस आ जाएंगी। यदि आप उस व्यवहार को पसंद नहीं करते हैं, तो आप whereStrict() विधि whereStrict() विधि का उपयोग कर सकते हैं।

लुकअप मान का उपयोग करें या डिफ़ॉल्ट लौटें

आप अक्सर खुद को ऐसी स्थिति में पाते हैं, जहां आपको वैरिएबल के समान मूल्य खोजने की आवश्यकता होती है, और संग्रह आपको कवर करते हैं।

नीचे दिए गए उदाहरण में हमें एक सरणी में तीन अलग-अलग स्थान मिलते हैं, जिसमें एक समान कॉलिंग कोड असाइन किया गया है। हम एक स्थान देना चाहते हैं और बदले में संबंधित कॉलिंग कोड प्राप्त करना चाहते हैं। में दूसरा पैरामीटर get एक डिफ़ॉल्ट पैरामीटर अगर पहले पैरामीटर नहीं पाया जाता है।

function lookupCallingCode($locale)
{
    return collect([
        'de_DE' => 49,
        'en_GB' => 44,
        'en_US' => 1,
    ])->get($locale, 44);
}

उपरोक्त उदाहरण में हम निम्नलिखित कर सकते हैं

lookupCallingCode('de_DE'); // Will return 49
lookupCallingCode('sv_SE'); // Will return 44

आप डिफ़ॉल्ट मान के रूप में कॉलबैक भी पास कर सकते हैं। यदि निर्दिष्ट कुंजी मौजूद नहीं है, तो कॉलबैक का परिणाम लौटाया जाएगा:

    return collect([
        'de_DE' => 49,
        'en_GB' => 44,
        'en_US' => 1,
    ])->get($locale, function() {
        return 44;
    });

यह जांचने के लिए कि क्या संग्रह किसी निश्चित स्थिति को संतुष्ट करता है, का उपयोग करना

एक आम समस्या वस्तुओं का एक संग्रह है जो सभी को एक निश्चित मानदंड को पूरा करने की आवश्यकता होती है। नीचे दिए गए उदाहरण में हमने आहार योजना के लिए दो आइटम एकत्र किए हैं और हम यह जांचना चाहते हैं कि आहार में कोई अस्वास्थ्यकर भोजन नहीं है।

// First we create a collection
$diet = collect([
    ['name' => 'Banana', 'calories' => '89'],
    ['name' => 'Chocolate', 'calories' => '546']
]);

// Then we check the collection for items with more than 100 calories
$isUnhealthy = $diet->contains(function ($i, $snack) {
    return $snack["calories"] >= 100;
});

उपरोक्त मामले में $isUnhealthy वैरिएबल को true सेट किया जाएगा क्योंकि चॉकलेट इस स्थिति से मिलती है, और आहार इस प्रकार अस्वस्थ है।

एक संग्रह से कुछ मूल्यों को निकालने के लिए प्लक का उपयोग करना

आप अक्सर अपने आप को डेटा के संग्रह के साथ पाएंगे जहां आप केवल डेटा के कुछ हिस्सों में रुचि रखते हैं।

नीचे दिए गए उदाहरण में हमें एक घटना में प्रतिभागियों की एक सूची मिली और हम नामों की एक सरल सूची के साथ एक टूर गाइड प्रदान करना चाहते हैं।

// First we collect the participants
$participants = collect([
    ['name' => 'John', 'age' => 55],
    ['name' => 'Melissa', 'age' => 18],
    ['name' => 'Bob', 'age' => 43],
    ['name' => 'Sara', 'age' => 18],
]);

// Then we ask the collection to fetch all the names
$namesList = $partcipants->pluck('name')
// ['John', 'Melissa', 'Bob', 'Sara'];

आप डॉट संकेतन के साथ ऑब्जेक्ट्स या नेस्टेड सरणियों / ऑब्जेक्ट्स के संग्रह के लिए pluck उपयोग भी कर सकते हैं।

$users = User::all(); // Returns Eloquent Collection of all users
$usernames = $users->pluck('username'); // Collection contains only user names

$users->load('profile'); // Load a relationship for all models in collection

// Using dot notation, we can traverse nested properties
$names = $users->pluck('profile.first_name'); // Get all first names from all user profiles

एक संग्रह में प्रत्येक तत्व को हेरफेर करने के लिए मानचित्र का उपयोग करना

अक्सर आपको डेटा का एक सेट संरचित करने और कुछ मूल्यों में हेरफेर करने के तरीके को बदलने की आवश्यकता होती है।

नीचे दिए गए उदाहरण में हमें संलग्न छूट राशि के साथ पुस्तकों का संग्रह मिला। लेकिन हमारे पास किताबों की एक सूची है जिसकी कीमत पहले से ही छूट गई है।

$books = [
    ['title' => 'The Pragmatic Programmer', 'price' => 20, 'discount' => 0.5],
    ['title' => 'Continuous Delivery', 'price' => 25, 'discount' => 0.1],
    ['title' => 'The Clean Coder', 'price' => 10, 'discount' => 0.75],
];

$discountedItems =  collect($books)->map(function ($book) {
   return ['title' => $book["title"], 'price' => $book["price"] * $book["discount"]];
});

//[
//    ['title' => 'The Pragmatic Programmer', 'price' => 10],
//    ['title' => 'Continuous Delivery', 'price' => 12.5],
//    ['title' => 'The Clean Coder', 'price' => 5],
//]

यह कुंजी को बदलने के लिए भी इस्तेमाल किया जा सकता है, मान लें कि हम कुंजी title को बदलना चाहते हैं यह name एक उपयुक्त समाधान होगा।

सांख्यिकीय गणनाओं के लिए एक संग्रह पर योग, औसत, न्यूनतम या अधिकतम का उपयोग करना

संग्रह आपको सरल सांख्यिकीय गणना करने का एक आसान तरीका भी प्रदान करता है।

$books = [
    ['title' => 'The Pragmatic Programmer', 'price' => 20],
    ['title' => 'Continuous Delivery', 'price' => 30],
    ['title' => 'The Clean Coder', 'price' => 10],
]

$min = collect($books)->min('price'); // 10
$max = collect($books)->max('price'); // 30
$avg = collect($books)->avg('price'); // 20
$sum = collect($books)->sum('price'); // 60

संग्रह छाँटना

एक संग्रह को छाँटने के कई अलग-अलग तरीके हैं।

क्रमबद्ध करें ()

sort विधि संग्रह को सॉर्ट करती है:

$collection = collect([5, 3, 1, 2, 4]);

$sorted = $collection->sort();

echo $sorted->values()->all();

returns : [1, 2, 3, 4, 5]

sort विधि भी अपने स्वयं के एल्गोरिथ्म के साथ एक कस्टम कॉलबैक में पारित करने की अनुमति देती है। हुड के तहत php के usort का उपयोग करता है।

$collection = $collection->sort(function ($a, $b) {
    if ($a == $b) {
        return 0;
    }
    return ($a < $b) ? -1 : 1;
});

इसके अनुसार क्रमबद्ध करें()

sortBy विधि दी गई कुंजी द्वारा संग्रह को sortBy करती है:

$collection = collect([
['name' => 'Desk', 'price' => 200],
['name' => 'Chair', 'price' => 100],
['name' => 'Bookcase', 'price' => 150],
]);

$sorted = $collection->sortBy('price');

echo $sorted->values()->all();

returns:  [
        ['name' => 'Chair', 'price' => 100],
        ['name' => 'Bookcase', 'price' => 150],
        ['name' => 'Desk', 'price' => 200],
    ]

sortBy विधि बहु-आयामी सरणी को सॉर्ट करने के लिए गहरी कुंजी तक पहुंचने के लिए डॉट नोटेशन प्रारूप का उपयोग करने की अनुमति देती है।

$collection = collect([
    ["id"=>1,"product"=>['name' => 'Desk', 'price' => 200]],
    ["id"=>2, "product"=>['name' => 'Chair', 'price' => 100]],
    ["id"=>3, "product"=>['name' => 'Bookcase', 'price' => 150]],
    ]);

$sorted = $collection->sortBy("product.price")->toArray();

return: [
  ["id"=>2, "product"=>['name' => 'Chair', 'price' => 100]],
  ["id"=>3, "product"=>['name' => 'Bookcase', 'price' => 150]],
  ["id"=>1,"product"=>['name' => 'Desk', 'price' => 200]],
]

SortByDesc ()

इस पद्धति में sortBy विधि के समान हस्ताक्षर हैं, लेकिन विपरीत क्रम में संग्रह को सॉर्ट करेगा।

कम () का उपयोग करना

reduce विधि संग्रह को एक मूल्य तक कम करती है, प्रत्येक पुनरावृत्ति के परिणाम को बाद के पुनरावृत्ति में पारित करती है। कृपया कम करने की विधि देखें।

reduce विधि एक संग्रह के साथ प्रत्येक आइटम के माध्यम से छोरों और अगले पुनरावृत्ति के लिए नए परिणाम पैदा करता है। अंतिम पुनरावृत्ति से प्रत्येक परिणाम पहले पैरामीटर (निम्नलिखित उदाहरणों में, $carry रूप में) के माध्यम से पारित किया जाता है।

यह विधि बड़े डेटा सेट पर बहुत अधिक प्रसंस्करण कर सकती है। निम्नलिखित उदाहरणों के लिए, हम निम्नलिखित उदाहरण का उपयोग करेंगे छात्र डेटा:

 $student = [
    ['class' => 'Math', 'score' => 60],
    ['class' => 'English', 'score' => 61],
    ['class' => 'Chemistry', 'score' => 50],
    ['class' => 'Physics', 'score' => 49],
];

सम विद्यार्थी का कुल अंक

$sum = collect($student)
    ->reduce(function($carry, $item){
        return $carry + $item["score"];
    }, 0);

परिणाम: 220

स्पष्टीकरण:

  • $carry अंतिम पुनरावृत्ति का परिणाम है।
  • दूसरा पैरामीटर पुनरावृत्ति के पहले दौर में $ ले जाने के लिए डिफ़ॉल्ट मान है। यह मामला, डिफ़ॉल्ट मान 0 है

एक छात्र को पास करें यदि उनके सभी अंक> = 50 हैं

$isPass = collect($student)
    ->reduce(function($carry, $item){
        return $carry && $item["score"] >= 50;
    }, true);

परिणाम: false

स्पष्टीकरण:

  • $ कैरी का डिफ़ॉल्ट मूल्य सत्य है
  • यदि सभी अंक 50 से अधिक हैं, तो परिणाम सही वापस आएगा; यदि कोई 50 से कम है, तो झूठे वापस करें।

यदि कोई अंक <50 है तो एक छात्र को असफल करें

$isFail = collect($student)
    ->reduce(function($carry, $item){
        return $carry || $item["score"] < 50;
    }, false);

परिणाम: true

के बारे में बताएं:

  • $ कैरी का डिफ़ॉल्ट मान गलत है
  • यदि कोई स्कोर 50 से कम है, तो सही लौटें; यदि सभी स्कोर 50 से अधिक हैं, तो गलत रिटर्न करें।

उच्चतम अंक के साथ वापसी विषय

$highestSubject = collect($student)
    ->reduce(function($carry, $item){
        return $carry === null || $item["score"] > $carry["score"] ? $item : $carry;
    });

परिणाम: [ "subject" => "English", "score" => 61 ]

के बारे में बताएं:

  • इस मामले में दूसरा पैरामीटर प्रदान नहीं किया गया है।

  • $ कैरी का डिफ़ॉल्ट मान शून्य है, इस प्रकार हम अपने सशर्त में इसकी जांच करते हैं।

संग्रह का विस्तार करने के लिए मैक्रो () का उपयोग करना

macro() फ़ंक्शन आपको Illuminate\Support\Collection ऑब्जेक्ट में नई कार्यक्षमता जोड़ने की अनुमति देता है

उपयोग:

Collection::macro("macro_name", function ($parameters) {
    // Your macro
});

उदाहरण के लिए:

Collection::macro('uppercase', function () {
    return $this->map(function ($item) {
        return strtoupper($item);
    });
});

collect(["hello", "world"])->uppercase();

परिणाम: ["HELLO", "WORLD"]

ऐरे सिंटैक्स का उपयोग करना

Collection ऑब्जेक्ट ArrayAccess और IteratorAggregate इंटरफ़ेस को लागू करता है, यह एक सरणी की तरह उपयोग करने की अनुमति देता है।

पहुँच संग्रह तत्व:

 $collection = collect([1, 2, 3]);
 $result = $collection[1];

परिणाम: 2

नया तत्व असाइन करें:

$collection = collect([1, 2, 3]);
$collection[] = 4;

परिणाम: $collection [1, 2, 3, 4]

लूप संग्रह:

$collection = collect(["a" => "one", "b" => "two"]);
$result = "";
foreach($collection as $key => $value){
    $result .= "(".$key.": ".$value.") ";        
}

परिणाम: $result है (a: one) (b: two)

रूपांतरण रूपांतरण के लिए सरणी:

संग्रह को मूल PHP सरणी में बदलने के लिए, उपयोग करें:

$array = $collection->all();
//or
$array = $collection->toArray()

किसी सरणी को संग्रह में बदलने के लिए, उपयोग करें:

$collection = collect($array);

सरणी कार्य के साथ संग्रह का उपयोग करना

कृपया ध्यान रखें कि संग्रह सामान्य वस्तुएं हैं, जिन्हें array_map($callback) जैसे स्पष्ट रूप से सरणियों की आवश्यकता वाले कार्यों द्वारा उपयोग किए जाने पर ठीक से परिवर्तित नहीं किया जाएगा।

संग्रह को पहले परिवर्तित करना सुनिश्चित करें, या, यदि उपलब्ध हो, तो इसके बजाय Collection वर्ग द्वारा प्रदान की गई विधि का उपयोग करें: $collection->map($callback)



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow