الفرق بين المراجعتين لصفحة: «Laravel/collections»

من موسوعة حسوب
لا ملخص تعديل
 
(21 مراجعة متوسطة بواسطة مستخدمين اثنين آخرين غير معروضة)
سطر 1: سطر 1:
 
== مقدمة==
<noinclude>{{DISPLAYTITLE:المجموعات}}</noinclude>
 
=== مقدمة ===
يوفر الصنف <code>Illuminate\Support\Collection</code> غلافًا ملائمًا و مساعدًا على العمل مع مصفوفات البيانات. مثلًا، تفقد الشيفرة الموالية إذ سنستعمل المساعد <code>collect</code> لإنشاء نسخة <code>Collection</code> جديدة من المصفوفة، ننفذ الدالة <code>strtoupper</code> مع كل عنصر، ثم نحذف كل العناصر الفارغة:<syntaxhighlight lang="php">
يوفر الصنف <code>Illuminate\Support\Collection</code> غلافًا ملائمًا و مساعدًا على العمل مع مصفوفات البيانات. مثلًا، تفقد الشيفرة الموالية إذ سنستعمل المساعد <code>collect</code> لإنشاء نسخة <code>Collection</code> جديدة من المصفوفة، ننفذ الدالة <code>strtoupper</code> مع كل عنصر، ثم نحذف كل العناصر الفارغة:<syntaxhighlight lang="php">
$collection = collect(['taylor', 'abigail', null])->map(function ($name) {
$collection = collect(['taylor', 'abigail', null])->map(function ($name) {
   return strtoupper($name);
   return strtoupper($name);


}) ->reject(function ($name) {
}) ->reject(function ($name) {
   return empty($name);
   return empty($name);


});
});
</syntaxhighlight>
</syntaxhighlight>كما ترى، تسمح الدالة بسلسلة توابعها لتنفيذِ تخطيطِ دقيق و التحكم في حجم المصفوفة قيد العمل. بشكل عام، المجموعات غير قابلة للتغيير، أي أن كل تابع <code>collect</code> يعيد نسخة من كائن مجموعة جديد تمامًا.
 
===إنشاء المجموعات===
كما ترى، تسمح الدالة بسلسلة توابعها لتنفيذِ تخطيطِ دقيق و التحكم في حجم المصفوفة قيد العمل. بشكل عام، المجموعات غير قابلة للتغيير، أي أن كل تابع collect يعيد نسخة من كائن مجموعة جديد تمامًا.
كما ذُكر سابقًا، يعيد التابع المساعد <code>collect</code> نسخة من كائن <code>Illuminate\Support\Collection</code> جديد لكل مصفوفة. لذا، يمكننا إنشاء مجموعة بسهولة<syntaxhighlight lang="php">
إنشاء المجموعات
 
كما ذُكر سابقًا، يعيد التابع المساعد collect نسخة من كائن <code>Illuminate\Support\Collection</code> جديد لكل مصفوفة. لذا، يمكننا إنشاء مجموعة بسهولة<syntaxhighlight lang="php">
$collection = collect([1, 2, 3]);
$collection = collect([1, 2, 3]);
</syntaxhighlight>
</syntaxhighlight>'''ملاحظة''': نتائج طلبات [[Laravel/eloquent|Eloquent]] تكون دائمًا على شكل كائن <code>Collection</code>.
 
===تمديد المجموعات===
<u>ملاحظة</u>: نتائج طلبات <code>Eloquent</code> تكون دائمًا على شكل كائن <code>Collection</code>.
 
=== تمديد المجموعات ===
المجموعات قابلة للتمديد، مما يسمح لك بإضافة توابع أخرى للصنف <code>Collection</code> في وقت التشغيل. مثلًا، الشيفرة التالية تضيف التابع <code>toUpper</code> إلى الصنف <code>Collection</code>:<syntaxhighlight lang="php">
المجموعات قابلة للتمديد، مما يسمح لك بإضافة توابع أخرى للصنف <code>Collection</code> في وقت التشغيل. مثلًا، الشيفرة التالية تضيف التابع <code>toUpper</code> إلى الصنف <code>Collection</code>:<syntaxhighlight lang="php">
use Illuminate\Support\Str;
use Illuminate\Support\Str;
سطر 33: سطر 22:
       return Str::upper($value);
       return Str::upper($value);
   });
   });
});
});


$collection = collect(['first', 'second']);
$collection = collect(['first', 'second']);
$upper = $collection->toUpper();
$upper = $collection->toUpper();


// ['FIRST', 'SECOND']
// ['FIRST', 'SECOND']
</syntaxhighlight>في العادة، عليك ذكر الإضافات للصنف <code>Collection</code> في مزود الخدمات.
==التوابع المتاحة==
في بقية هذا التوثيق، سنناقش كل تابع متوافر في الصنف <code>Collection</code>. تذكر أنّ كل التوابع يمكن سلسلتها معًا لمعالجة المصفوفة بيسر. بالإضافة ألى ذلك، تقريبًا كل التوابع تعيد نسخة جديدة من الكائن <code>Collection</code> مما يحافظ على المجموعة الأصلية عند الحاجة:
===<code>()all</code>===
يعيد التابع المصفوفة المقصودة على شكل مجموعة:<syntaxhighlight lang="php">
collect([1, 2, 3])->all();
// [1, 2, 3]
</syntaxhighlight>
</syntaxhighlight>
===<code>()average</code>===
اسم بديل للتابع <code>avg</code>.
===<code>()avg</code>===
يعيد التابع قيمة المتوسط الحسابي للمفتاح الممرّر:<syntaxhighlight lang="php">
$average = collect([['foo' => 10], ['foo' => 10], ['foo' => 20], ['foo' => 40]])->avg('foo');
// 20


في العادة، عليك ذكر الإضافات للصنف <code>Collection</code> في مزود الخدمات.
$average = collect([1, 1, 2, 4])->avg();
// 2


=== التوابع المتاحة ===
في بقية هذا التوثيق، سنناقش كل تابع متوافر في الصنف Collection. تذكر أنّ كل التوابع يمكن سلسلتها معًا لمعالجة المصفوفة بيسر. بالإضافة ألى ذلك، تقريبًا كل التوابع تعيد نسخة جديدة من الكائن Collection مما يحافظ على المجموعة الأصلية عند الحاجة:


<code>all</code>
</syntaxhighlight>
===<code>()chunk</code>===
يقسم التابع المجموعة لعدة مجموعات أصغر بحجم معين:<syntaxhighlight lang="php">
$collection = collect([1, 2, 3, 4, 5, 6, 7]);
$chunks = $collection->chunk(4);
$chunks->toArray();


<code>isEmpty</code>
// [[1, 2, 3, 4], [5, 6, 7]]


<code>shuffle</code>


<code>average</code>
</syntaxhighlight>هذا التابع مفيد خاصة في الواجهات عند العمل مع نظام شبكي "grid" مثل <code>Bootstrap</code>. تخيل أنك تريد عرض مجموعة من نماذج [[Laravel/eloquent|Eloquent]] في شبكة:<syntaxhighlight lang="php">
@foreach ($products->chunk(3) as $chunk)


<code>isNotEmpty</code>
      @foreach ($chunk as $product)
{{$product->name }}
      @endforeach
@endforeach


<code>slice</code>


<code>avg</code>
</syntaxhighlight>
===<code>()collapse</code>===
يُسقط التابع مجموعة من المصفوفات في مجموعة واحدة ذات بعد واحد:<syntaxhighlight lang="php">
$collection = collect([[1, 2, 3], [4, 5, 6], [7, 8, 9]]);
$collapsed = $collection->collapse();
$collapsed->all();


<code>keyBy</code>
// [1, 2, 3, 4, 5, 6, 7, 8, 9]


<code>sort</code>


<code>chunk</code>
</syntaxhighlight>
===<code>()combine</code>===
يدمج التابع مفاتيح المجموعة مع قيم من مجموعة أو مصفوفة أخرى:<syntaxhighlight lang="php">
$collection = collect(['name', 'age']);
$combined = $collection->combine(['George', 29]);
$combined->all();


<code>keys</code>
// ['name' => 'George', 'age' => 29]


<code>sortBy</code>


<code>collase</code>
</syntaxhighlight>
===<code>()concat</code>===
يضيف التابع المصفوفة الممررة أو قيم المجموعة المُمَرَّرة لآخر المجموعة:<syntaxhighlight lang="php">
$collection = collect(['John Doe']);
$concatenated = $collection->concat(['Jane Doe'])->concat(['name' => 'Johnny Doe']);
$concatenated->all();


<code>last</code>
// ['John Doe', 'Jane Doe', 'Johnny Doe']


<code>sortByDesc</code>


<code>combine</code>
</syntaxhighlight>
===<code>()contains</code>===
يحدد التابع إذا كانت المجموعة تحتوي على عنصرٍ محدِّد أم لا:<syntaxhighlight lang="php">
$collection = collect(['name' => 'Desk', 'price' => 100]);
$collection->contains('Desk');


<code>macro</code>
// true


<code>sortKeys</code>
$collection->contains('New York');


<code>concat</code>
// false


<code>make</code>


<code>sortKeysDesc</code>
</syntaxhighlight>يمكنك أيضًا تمرير زوجٍ من المفتاح/القيمة إلى التابع الذي سيحدد إذا كان الثنائي موجودًا أم لا:<syntaxhighlight lang="php">
$collection = collect([


<code>contains</code>
  ['product' => 'Desk', 'price' => 200],
 
  ['product' => 'Chair', 'price' => 100],
<code>map</code>
]);


<code>splice</code>
$collection->contains('product', 'Bookcase');


<code>containsStrict</code>
// false


<code>mapinto</code>


<code>slpit</code>
</syntaxhighlight>أخيرًا، يمكنك تمرير دالة رد نداء إلى التابع <code>contains</code> لتقوم بعملية التحقق من وجود القيمة بنفسك:<syntaxhighlight lang="php">
$collection = collect([1, 2, 3, 4, 5]);
$collection->contains(function ($value, $key) {


<code>count</code>
  return $value > 5;
});


<code>mapSpread</code>
// false


<code>sum</code>


<code>crossJoin</code>
</syntaxhighlight>يقوم التابع بمقارنة بسيطة، أي أن سلسلة المحارف التي تحتوي على رقم تُعدّ مساويةً لعدد صحيحٍ بنفس القيمة الرقمية. استعمل التابع <code>containsStrict</code> لمقارنة أكثر صرامةً.
===<code>()containsStrict</code>===
نفس الوظيفة التابع لكنها تستعمل مقارنةً صارمةً (strict).
===<code>()count</code>===
يعيد التابع عدد عناصر المجموعة:<syntaxhighlight lang="php">
$collection = collect([1, 2, 3, 4]);
$collection->count();


<code>mapToGroups</code>
// 4


<code>take</code>


<code>dd</code>
</syntaxhighlight>
===<code>()crossJoin</code>===
يقوم التابع بوصل تقاطعي بين قيم المجموعة والمصفوفة الممرّرة، ويعيد جداءً ديكارتيًا بكل المبادلات الممكنة:<syntaxhighlight lang="php">
$collection = collect([1, 2]);
$matrix = $collection->crossJoin(['a', 'b']);
$matrix->all();


<code>mapWithKeys</code>
/*
    [
        [1, 'a'],
        [1, 'b'],
        [2, 'a'],
        [2, 'b'],
    ]
*/


<code>tap</code>
$collection = collect([1, 2]);
 
$matrix = $collection->crossJoin(['a', 'b'], ['I', 'II']);
<code>diff</code>
$matrix->all();


<code>max</code>
/*
    [
        [1, 'a', 'I'],
        [1, 'a', 'II'],
        [1, 'b', 'I'],
        [1, 'b', 'II'],
        [2, 'a', 'I'],
        [2, 'a', 'II'],
        [2, 'b', 'I'],
        [2, 'b', 'II'],
    ]
*/
</syntaxhighlight>
===<code>()dd</code>===
يطبع التابع عناصر المجموعة وينهي تنفيذ السكربت:<syntaxhighlight lang="php">
$collection = collect(['John Doe', 'Jane Doe']);
$collection->dd();


<code>times</code>
/*
 
    Collection {
<code>diffAssoc</code>
        #items: array:2 [
 
            0 => "John Doe"
<code>median</code>
            1 => "Jane Doe"
 
        ]
<code>toArray</code>
    }
 
*/
<code>diffKeys</code>
</syntaxhighlight>إذا لم ترد إنهاء السكربت، فاستعمل التابع <code>dump</code> بدلًا من <code>dd</code>.
 
===<code>()diff</code>===
<code>merge</code>
يقارن التابع المجموعة بمجموعة أخرى أو بمصفوفة PHP عادية اعتمادًا على قيمها. يعيد هذا التابع قيم المجموعة الأصلية غير الموجودة في المجموعة الممرّرة:<syntaxhighlight lang="php">
$collection = collect([1, 2, 3, 4, 5]);
$diff = $collection->diff([2, 4, 6, 8]);
$diff->all();


<code>toJson</code>
// [1, 3, 5]


<code>dump</code>


<code>min</code>
</syntaxhighlight>
===<code>()diffAssoc</code>===
يقارن التابع المجموعة بمجموعة أخرى أو بمصفوفة [[PHP]] بالاعتماد على المفاتيح والقيم. يعيد هذا التابع أزواج المفتاح/القيمة من المجموعة الأصلية غير الموجودة في المجموعة الممررة:<syntaxhighlight lang="php">
$collection = collect([


<code>transform</code>
  'color' => 'orange',
  'type' => 'fruit',
  'remain' => 6
]);


<code>each</code>
$diff = $collection->diffAssoc([


<code>mode</code>
  'color' => 'yellow',
  'type' => 'fruit',
  'remain' => 3,
  'used' => 6
]);


<code>union</code>
$diff->all();


<code>eachSpread</code>
// ['color' => 'orange', 'remain' => 6]


<code>nth</code>


<code>unique</code>
</syntaxhighlight>
===<code>()diffKeys</code>===
يقارن هذا التابع المجموعة بمجموعة أخرى أو بمصفوفة PHP بالإرتكاز على المفاتيح، يعيد هذا التابع أزواج المفتاح/القيمة من المجموعة الأصلية غير الموجودة في المجموعة الممرّرة:<syntaxhighlight lang="php">
$collection = collect([


<code>every</code>
  'one' => 10,
 
  'two' => 20,
<code>only</code>
  'three' => 30,
  'four' => 40,
  'five' => 50,
]);


<code>uniqueStrict</code>
$diff = $collection->diffKeys([


<code>except</code>
  'two' => 2,
  'four' => 4,
  'six' => 6,
  'eight' => 8,
]);


<code>pad</code>
$diff->all();


<code>unless</code>
// ['one' => 10, 'three' => 30, 'five' => 50]


<code>filter</code>


<code>partition</code>
</syntaxhighlight>
===<code>()dump</code>===
يطبع التابع عناصر المجموعة:<syntaxhighlight lang="php">
$collection = collect(['John Doe', 'Jane Doe']);


<code>unwrap</code>
$collection->dump();


<code>first</code>
/*


<code>pipe</code>
  Collection {
      #items: array:2 [
          0 => "John Doe"
          1 => "Jane Doe"
      ]
  }
*/


<code>values</code>
</syntaxhighlight>إذا أردت إيقاف تنفيذ السكربت بعد تفريغ المجموعة فاستعمل التابع <code>dd</code>.
===<code>()each</code>===
يكرّر التابع عناصر المجموعة واحدًا بواحد ويمرّرها لدالة رد نداء:<syntaxhighlight lang="php">
$collection->each(function ($item, $key) {


<code>firstWhere</code>
  //
});


<code>pluck</code>


<code>when</code>
</syntaxhighlight>إذا أردت إيقاف التكرار، أعد القيمة <code>false</code> من دالة رد النداء:<syntaxhighlight lang="php">
$collection->each(function ($item, $key) {


<code>flatMap</code>
  if (/* شرط إيقاف */) {
      return false;
  }
});


<code>pop</code>


<code>where</code>
</syntaxhighlight>
===<code>()eachSpread</code>===
يكرّّر التابع عناصر المجموعة ويمرّر كل عنصر متداخل لدالة رد النداء:<syntaxhighlight lang="php">
$collection = collect([['John Doe', 35], ['Jane Doe', 33]]);
$collection->eachSpread(function ($name, $age) {


<code>flatten</code>
  //
});


<code>prepend</code>
</syntaxhighlight>يمكنك إيقاف التكرار بإعادة القيمة <code>false</code> من دالة رد النداء.<syntaxhighlight lang="php">
$collection->eachSpread(function ($name, $age) {


<code>whereStrict</code>
  return false;
});


<code>flip</code>


<code>pull</code>
</syntaxhighlight>
===<code>()every</code>===
يمكن استعمال التابع للتأكد من أن كل عناصر المجموعة تحقق شرطًا معينًا:<syntaxhighlight lang="php">
collect([1, 2, 3, 4])->every(function ($value, $key) {


<code>whereIn</code>
  return $value > 2;
});


<code>forget</code>
// false


<code>push</code>


<code>whereInStrict</code>
</syntaxhighlight>


<code>forPage</code>
=== <code>()except</code> ===
يعيد التابع كل عناصر المجموعة باستثناء العناصر بالمفاتيح المحدَّدة:<syntaxhighlight lang="php">
$collection = collect(['product_id' => 1, 'price' => 100, 'discount' => false]);
$filtered = $collection->except(['price', 'discount']);
$filtered->all();


<code>put</code>
// ['product_id' => 1]


<code>whereInstanceOf</code>


<code>get</code>
</syntaxhighlight>لعكس وظيفة <code>except</code>، انظر التابع <code>only</code>.
===<code>()filter</code>===
يرشِّح التابع عناصر المجموعة ويُبقي فقط العناصر التي تحقق شرطًا معينًا:<syntaxhighlight lang="php">
$collection = collect([1, 2, 3, 4]);
$filtered = $collection->filter(function ($value, $key) {


<code>random</code>
  return $value > 2;
});


<code>whereNotin</code>
$filtered->all();


<code>groupBy</code>
// [3, 4]


<code>reduce</code>


<code>whereNotinStrict</code>
</syntaxhighlight>إذا لم توفّر نداء للتابع، يحذف <code>filter</code> كل العناصر المساوية للقيمة <code>false</code>:<syntaxhighlight lang="php">
$collection = collect([1, 2, 3, null, false, , 0, []]);
$collection->filter()->all();


<code>has</code>
// [1, 2, 3]


<code>reject</code>


<code>wrap</code>
</syntaxhighlight>لعكس وظيفة <code>filter</code> انظر التابع <code>reject</code>.
===<code>()first</code>===
يرجع التابع العنصر الأول من المجموعة الذي يحقق شرطًا معينًا:<syntaxhighlight lang="php">
collect([1, 2, 3, 4])->first(function ($value, $key) {


<code>implode</code>
  return $value > 2;
}); // 3


<code>reverse</code>


<code>zip</code>
</syntaxhighlight>يمكنك أيضًا استدعاء التابع <code>first</code> دون معامل، وسيعيد العنصر الأول من المجموعة، وإذا كانت المجموعة فارغةً، فستعاد القيمة <code>null</code>:<syntaxhighlight lang="php">
collect([1, 2, 3, 4])->first();


<code>intersect</code>
// 1


<code>search</code><code><br>
intersectByKeys</code>


<code>shift</code>
</syntaxhighlight>
===<code>()firstWhere</code>===
يعيد التابع العنصر الأول من المجموعة الموافق لزوج المفتاح/القيمة الممرّر:<syntaxhighlight lang="php">
$collection = collect([


=== لائحة التوابع ===
  ['name' => 'Regena', 'age' => 12],
  ['name' => 'Linda', 'age' => 14],
  ['name' => 'Diego', 'age' => 23],
  ['name' => 'Linda', 'age' => 84],
]);


==== ()all ====
$collection->firstWhere('name', 'Linda');
يعيد التابع <code>all</code> المصفوفة المقصودة على شكل مجموعة:<syntaxhighlight lang="php">
collect([1, 2, 3])->all();


// [1, 2, 3]
// ['name' => 'Linda', 'age' => 14]


</syntaxhighlight>


==== ()average ====
</syntaxhighlight>يمكن أيضًا استعمال التابع مع عامل مقارنة:<syntaxhighlight lang="php">
اسم بديل للتابع <code>avg</code>.
$collection->firstWhere('age', '>=', 18);


==== ()avg ====
// ['name' => 'Diego', 'age' => 23]
يعيد التابع <code>avg</code> قيمة المتوسط الحسابي للمفتاح الممرّر:<syntaxhighlight lang="php">
$average = collect([['foo' => 10], ['foo' => 10], ['foo' => 20], ['foo' => 40]])->avg('foo');


// 20


$average = collect([1, 1, 2, 4])->avg();
</syntaxhighlight>
===<code>()flatMap</code>===
ينفذ التابع حلقة تكرار في المجموعة، فيمرر قيمة كل تكرار لنداء معين. يمكن للنداء تغيير العنصر وإرجاعه وبالتالي يكوّن مجموعةً جديدة من العناصر المغيَّرة. ثم تُسطَّح المجموعة حسب مستواها:<syntaxhighlight lang="php">
$collection = collect([


// 2
  ['name' => 'Sally'],
  ['school' => 'Arkansas'],
  ['age' => 28]
]);


$flattened = $collection->flatMap(function ($values) {


</syntaxhighlight>
  return array_map('strtoupper', $values);
});


==== ()chunk ====
$flattened->all();
يقسم التابع <code>chunk</code> المجموعة لعدة مجموعات أصغر بحجم معين:<syntaxhighlight lang="php">
$collection = collect([1, 2, 3, 4, 5, 6, 7]);


$chunks = $collection->chunk(4);
// ['name' => 'SALLY', 'school' => 'ARKANSAS', 'age' => '28'];
 
$chunks->toArray();
 
// [[1, 2, 3, 4], [5, 6, 7]]




</syntaxhighlight>
</syntaxhighlight>
===<code>()flatten</code>===
يُسطِّح التابع مجموعة متعددة الأبعاد لمجموعة ذات بعد واحد:<syntaxhighlight lang="php">
$collection = collect(['name' => 'taylor', 'languages' => ['php', 'javascript']]);
$flattened = $collection->flatten();
$flattened->all();


هذا التابع مفيد خاصة في الواجهات عند العمل مع نظام شبكي "grid" مثل <code>Bootstrap</code>. تخيل أنك تريد عرض مجموعة من نماذج Eloquent في شبكة:<syntaxhighlight lang="php">
// ['taylor', 'php', 'javascript'];
@foreach ($products->chunk(3) as $chunk)
</syntaxhighlight>يمكنك أيضًا تمرير معامل لضبط عمق التسطيح:<syntaxhighlight lang="php">
$collection = collect([


       @foreach ($chunk as $product)
  'Apple' => [
{{$product->name }}
       ['name' => 'iPhone 6S', 'brand' => 'Apple'],
      @endforeach
  ],
@endforeach
  'Samsung' => [
      ['name' => 'Galaxy S7', 'brand' => 'Samsung']
  ],
]);


$products = $collection->flatten(1);
$products->values()->all();


</syntaxhighlight>
/*


==== ()collapse ====
  [
يُسقط التابع <code>collapse</code> مجموعة من المصفوفات في مجموعة واحدة ذات بعد واحد:<syntaxhighlight lang="php">
      ['name' => 'iPhone 6S', 'brand' => 'Apple'],
$collection = collect([[1, 2, 3], [4, 5, 6], [7, 8, 9]]);
      ['name' => 'Galaxy S7', 'brand' => 'Samsung'],
  ]


$collapsed = $collection->collapse();
</syntaxhighlight>في هذا المثال، سيتسبب عدم توفير عمق في تسطيح المصفوفات الداخلية لتصبح النتيجة <code>['iPhone 6S', 'Apple', 'Galaxy S7', 'Samsung']</code>. مما يوفّر مستوى عمق يسمح بتحديد مستوى التداخل الذي سيتم تسطيحه.
===<code>()flip</code>===
يُبدِّل التابع المفتاح بقيمته:<syntaxhighlight lang="php">
$collection = collect(['name' => 'taylor', 'framework' => 'laravel']);
$flipped = $collection->flip();
$flipped->all();


$collapsed->all();
// ['taylor' => 'name', 'laravel' => 'framework']
</syntaxhighlight>
===<code>()forget</code>===
يحذف التابع عنصرًا من المجموعة باستخدام مفتاحه:<syntaxhighlight lang="php">
$collection = collect(['name' => 'taylor', 'framework' => 'laravel']);
$collection->forget('name');
$collection->all();


// [1, 2, 3, 4, 5, 6, 7, 8, 9]
// ['framework' => 'laravel']
</syntaxhighlight>'''تنبيه:''' على عكس جل توابع المجموعات، لا يعيد <code>forget</code> مجموعةً جديدةً بل يغيّر في المجموعة التي استدعي هذا التابع عليها.
===<code>()forPage</code>===
يعيد التابع مجموعة تحتوي العناصر الموجودة في رقم الصفحة الممرّر. يقبل التابع رقم صفحة كمعامل أول وعدد العناصر التي يجب إظهارها في الصفحة كمعامل ثاني:<syntaxhighlight lang="php">
$collection = collect([1, 2, 3, 4, 5, 6, 7, 8, 9]);
$chunk = $collection->forPage(2, 3);
$chunk->all();


// [4, 5, 6]


</syntaxhighlight>
</syntaxhighlight>
===<code>()get</code>===
يعيد التابع قيمة العنصر ذي المفتاح المُمرَّر إلى التابع. إذا كان المفتاح غير موجود فستعاد القيمة <code>null</code>:<syntaxhighlight lang="php">
$collection = collect(['name' => 'taylor', 'framework' => 'laravel']);
$value = $collection->get('name');


==== ()combine ====
// taylor
يدمج التابع <code>combine</code> مفاتيح المجموعة مع قيم من مجموعة أو مصفوفة أخرى:<syntaxhighlight lang="php">
$collection = collect(['name', 'age']);


$combined = $collection->combine(['George', 29]);


$combined->all();
</syntaxhighlight>يمكنك تمرير قيمة أولية اختيارية كمعامل ثاني:<syntaxhighlight lang="php">
$collection = collect(['name' => 'taylor', 'framework' => 'laravel']);
$value = $collection->get('foo', 'default-value');


// ['name' => 'George', 'age' => 29]
// default-value


</syntaxhighlight>يمكنك حتى تمرير دالة رد نداء. تُعاد القيمة المُعادة من دالة رد النداء في حال عدم وجود المفتاح:<syntaxhighlight lang="php">
$collection->get('email', function () {


</syntaxhighlight>
  return 'default-value';
});


==== ()concat ====
// default-value
يضيف التابع <code>concat</code> المصفوفة الممررة أو قيم المجموعة المُمَرَّرة لآخر المجموعة:<syntaxhighlight lang="php">
$collection = collect(['John Doe']);


$concatenated = $collection->concat(['Jane Doe'])->concat(['name' => 'Johnny Doe']);
</syntaxhighlight>
===<code>()groupBy</code>===
يُجمِّع التابع العناصر حسب قيمة المفتاح الممرّر إلى التابع:<syntaxhighlight lang="php">
$collection = collect([


$concatenated->all();
  ['account_id' => 'account-x10', 'product' => 'Chair'],
  ['account_id' => 'account-x10', 'product' => 'Bookcase'],
  ['account_id' => 'account-x11', 'product' => 'Desk'],
]);


// ['John Doe', 'Jane Doe', 'Johnny Doe']
$grouped = $collection->groupBy('account_id');
$grouped->toArray();


/*
  [
      'account-x10' => [
          ['account_id' => 'account-x10', 'product' => 'Chair'],
          ['account_id' => 'account-x10', 'product' => 'Bookcase'],
      ],
      'account-x11' => [
          ['account_id' => 'account-x11', 'product' => 'Desk'],
      ],
  ]
*/


</syntaxhighlight>
</syntaxhighlight>بدل تمرير سلسلة محارف <code>key</code>، يمكنك تمرير دالة رد نداء التي يجب أن تعيد القيمة التي تريد أن تكون مفتاح التجميع:<syntaxhighlight lang="php">
$grouped = $collection->groupBy(function ($item, $key) {


==== ()contains ====
  return substr($item['account_id'], -3);
يحدد التابع <code>contains</code> إذا كانت المجموعة تحتوي على عنصرٍ محدِّد أم لا:<syntaxhighlight lang="php">
});
$collection = collect(['name' => 'Desk', 'price' => 100]);


$collection->contains('Desk');
$grouped->toArray();


// true
/*


$collection->contains('New York');
  [
      'x10' => [
          ['account_id' => 'account-x10', 'product' => 'Chair'],
          ['account_id' => 'account-x10', 'product' => 'Bookcase'],
      ],
      'x11' => [
          ['account_id' => 'account-x11', 'product' => 'Desk'],
      ],
  ]
*/


// false


</syntaxhighlight>يمكن تمرير عدة معايير تجميع كمصفوفة، يُطبّق كل عنصر من المصفوفة على مستوى العمق الملائم في مصفوفة متعددة الأبعاد:<syntaxhighlight lang="php">
$data = new Collection([


</syntaxhighlight>
  10 => ['user' => 1, 'skill' => 1, 'roles' => ['Role_1', 'Role_3']],
 
  20 => ['user' => 2, 'skill' => 1, 'roles' => ['Role_1', 'Role_2']],
يمكنك أيضًا تمرير زوجٍ من المفتاح/القيمة إلى التابع الذي سيحدد إذا كان الثنائي موجودًا أم لا:<syntaxhighlight lang="php">
   30 => ['user' => 3, 'skill' => 2, 'roles' => ['Role_1']],
$collection = collect([
   40 => ['user' => 4, 'skill' => 2, 'roles' => ['Role_2']],
 
   ['product' => 'Desk', 'price' => 200],
   ['product' => 'Chair', 'price' => 100],
]);
]);


$collection->contains('product', 'Bookcase');
$result = $data->groupBy([


// false
  'skill',
  function ($item) {
      return $item['roles'];
  },
], $preserveKeys = true);


/* [


</syntaxhighlight>
  1 => [
 
      'Role_1' => [
أخيرًا، يمكنك تمرير دالة رد نداء إلى التابع <code>contains</code> لتقوم بعملية التحقق من وجود القيمة بنفسك:<syntaxhighlight lang="php">
          10 => ['user' => 1, 'skill' => 1, 'roles' => ['Role_1', 'Role_3']],
$collection = collect([1, 2, 3, 4, 5]);
          20 => ['user' => 2, 'skill' => 1, 'roles' => ['Role_1', 'Role_2']],
 
      ],
$collection->contains(function ($value, $key) {
      'Role_2' => [
 
          20 => ['user' => 2, 'skill' => 1, 'roles' => ['Role_1', 'Role_2']],
   return $value > 5;
      ],
});
      'Role_3' => [
 
          10 => ['user' => 1, 'skill' => 1, 'roles' => ['Role_1', 'Role_3']],
// false
      ],
  ],
  2 => [
      'Role_1' => [
          30 => ['user' => 3, 'skill' => 2, 'roles' => ['Role_1']],
      ],
      'Role_2' => [
          40 => ['user' => 4, 'skill' => 2, 'roles' => ['Role_2']],
      ],
   ],
];
 
*/




</syntaxhighlight>
</syntaxhighlight>
===<code>()has</code>===
يحدد التابع إذا كان المفتاح موجودًا في المجموعة أم لا:<syntaxhighlight lang="php">
$collection = collect(['account_id' => 1, 'product' => 'Desk']);
$collection->has('product');


يقوم التابع بمقارنة بسيطة، أي أن سلسلة المحارف التي تحتوي على رقم تُعدّ مساويةً لعدد صحيحٍ بنفس القيمة الرقمية. استعمل التابع <code>containsStrict</code> لمقارنة أكثر صرامةً.
// true


==== ()containsStrict ====
نفس الوظيفة التابع <code>contains</code> لكنها تستعمل مقارنةً صارمةً (strict).


==== ()count ====
</syntaxhighlight>
يعيد التابع <code>count</code> عدد عناصر المجموعة:<syntaxhighlight lang="php">
===<code>()implode</code>===
$collection = collect([1, 2, 3, 4]);
يضم التابع عناصر المجموعة في سلسلة حرفية. تعتمد التوابع على نوع العناصر في المجموعة. إذا كانت المجموعة تحتوي مصفوفات أو كائنات، يجب تمرير مفتاح الخاصيات التي تريد ضمّها وعلامة الربط "glue" الذي تريد استعماله بين القيم:<syntaxhighlight lang="php">
$collection = collect([


$collection->count();
  ['account_id' => 1, 'product' => 'Desk'],
  ['account_id' => 2, 'product' => 'Chair'],
]);


// 4
$collection->implode('product', ', ');


// Desk, Chair


</syntaxhighlight>


==== ()crossJoin ====
</syntaxhighlight>إذا كانت المجموعة تحتوي سلاسل نصية أو قيمًا رقميةً بسيطةً، فمرّر علامة الربط فقط كمعامل إلى التابع:<syntaxhighlight lang="php">
يقوم التابع بوصل تقاطعي بين قيم المجموعة والمصفوفة الممرّرة، ويعيد جداءً ديكارتيًا بكل المبادلات الممكنة:<syntaxhighlight lang="php">
collect([1, 2, 3, 4, 5])->implode('-');
$collection = collect([1, 2]);


$matrix = $collection->crossJoin(['a', 'b']);
// '1-2-3-4-5'


$matrix->all();


/*
</syntaxhighlight>
    [
===<code>()intersect</code>===
        [1, 'a'],
يحذف التابع أي قيمة في المجموعة الأصلية غير موجودة في المجموعة أو المصفوفة الممرّرة. تحافظ المجموعة النهائية على مفاتيح المجموعة الأصلية:<syntaxhighlight lang="php">
        [1, 'b'],
$collection = collect(['Desk', 'Sofa', 'Chair']);
        [2, 'a'],
$intersect = $collection->intersect(['Desk', 'Chair', 'Bookcase']);
        [2, 'b'],
$intersect->all();
    ]
*/


$collection = collect([1, 2]);
// [0 => 'Desk', 2 => 'Chair']


$matrix = $collection->crossJoin(['a', 'b'], ['I', 'II']);


$matrix->all();
</syntaxhighlight>
===<code>()intersectByKeys</code>===
يحذف التابع أي مفتاح من المجموعة الأصلية غير موجود في المجموعة أو المصفوفة الممرّرة:<syntaxhighlight lang="php">
$collection = collect([
 
  'serial' => 'UX301', 'type' => 'screen', 'year' => 2009
]);
 
$intersect = $collection->intersectByKeys([
 
  'reference' => 'UX404', 'type' => 'tab', 'year' => 2011
]);
 
$intersect->all();
 
// ['type' => 'screen', 'year' => 2009]
 


/*
    [
        [1, 'a', 'I'],
        [1, 'a', 'II'],
        [1, 'b', 'I'],
        [1, 'b', 'II'],
        [2, 'a', 'I'],
        [2, 'a', 'II'],
        [2, 'b', 'I'],
        [2, 'b', 'II'],
    ]
*/
</syntaxhighlight>
</syntaxhighlight>
===<code>()isEmpty</code>===
يعيد التابع القيمة <code>true</code> إذا كانت المجموعة فارغة وإلا فسيعيد <code>false</code>:<syntaxhighlight lang="php">
collect([])->isEmpty();


==== ()dd ====
// true
يطبع التابع <code>dd</code> عناصر المجموعة وينهي تنفيذ السكربت:<syntaxhighlight lang="php">
$collection = collect(['John Doe', 'Jane Doe']);


$collection->dd();


/*
</syntaxhighlight>
    Collection {
===<code>()isNotEmpty</code>===
        #items: array:2 [
يعيد التابع القيمة <code>true</code> إذا لم تكن المجموعة فارغة، وإلا فسيعيد <code>false</code>:<syntaxhighlight lang="php">
            0 => "John Doe"
collect([])->isNotEmpty();
            1 => "Jane Doe"
        ]
    }
*/
</syntaxhighlight>إذا لم ترد إنهاء السكربت، فاستعمل التابع <code>dump</code> بدلًا من <code>dd</code>.


==== ()diff ====
// false
يقارن التابع <code>diff</code> المجموعة بمجموعة أخرى أو بمصفوفة PHP عادية اعتمادًا على قيمها. يعيد هذا التابع قيم المجموعة الأصلية غير الموجودة في المجموعة الممرّرة:<syntaxhighlight lang="php">
$collection = collect([1, 2, 3, 4, 5]);
 
$diff = $collection->diff([2, 4, 6, 8]);
 
$diff->all();
 
// [1, 3, 5]




</syntaxhighlight>
</syntaxhighlight>
 
===<code>()keyBy</code>===
==== ()diffAssoc ====
يضيف التابع مفاتيح للمجموعة، إذا وُجد أكثر من عنصر بنفس المفتاح، فسيضاف الأخير فقط إلى المجموعة الجديدة:<syntaxhighlight lang="php">
يقارن التابع <code>diffAssoc</code> المجموعة بمجموعة أخرى أو بمصفوفة PHP بالاعتماد على المفاتيح والقيم. يعيد هذا التابع أزواج المفتاح/القيمة من المجموعة الأصلية غير الموجودة في المجموعة الممررة:<syntaxhighlight lang="php">
$collection = collect([
$collection = collect([


   'color' => 'orange',
   ['product_id' => 'prod-100', 'name' => 'Desk'],
   'type' => 'fruit',
   ['product_id' => 'prod-200', 'name' => 'Chair'],
  'remain' => 6
]);
]);


$diff = $collection->diffAssoc([
$keyed = $collection->keyBy('product_id');


  'color' => 'yellow',
$keyed->all();
  'type' => 'fruit',
  'remain' => 3,
  'used' => 6
]);


$diff->all();
/*


// ['color' => 'orange', 'remain' => 6]
  [
      'prod-100' => ['product_id' => 'prod-100', 'name' => 'Desk'],
      'prod-200' => ['product_id' => 'prod-200', 'name' => 'Chair'],
  ]
*/


</syntaxhighlight>يمكنك تمرير نداء للتابع. يجب أن يعيد النداء القيمة التي ستستعمل كمفتاح للمجموعة:<syntaxhighlight lang="php">
$keyed = $collection->keyBy(function ($item) {


</syntaxhighlight>
  return strtoupper($item['product_id']);
});


==== ()diffKeys ====
$keyed->all();
يقارن هذا التابع المجموعة بمجموعة أخرى أو بمصفوفة PHP بالإرتكاز على المفاتيح، يعيد هذا التابع أزواج المفتاح/القيمة من المجموعة الأصلية غير الموجودة في المجموعة الممرّرة:
<syntaxhighlight lang="php">
$collection = collect([


  'one' => 10,
/*
  'two' => 20,
  'three' => 30,
  'four' => 40,
  'five' => 50,
]);


$diff = $collection->diffKeys([
  [
      'PROD-100' => ['product_id' => 'prod-100', 'name' => 'Desk'],
      'PROD-200' => ['product_id' => 'prod-200', 'name' => 'Chair'],
  ]
*/
 
</syntaxhighlight>
===<code>()keys</code>===
يعيد التابع مجموعة متكونة من كل المفاتيح:<syntaxhighlight lang="php">
$collection = collect([


   'two' => 2,
   'prod-100' => ['product_id' => 'prod-100', 'name' => 'Desk'],
  'four' => 4,
   'prod-200' => ['product_id' => 'prod-200', 'name' => 'Chair'],
   'six' => 6,
  'eight' => 8,
]);
]);


$diff->all();
$keys = $collection->keys();
 
$keys->all();


// ['one' => 10, 'three' => 30, 'five' => 50]  
// ['prod-100', 'prod-200']




</syntaxhighlight>
</syntaxhighlight>
===<code>()last</code>===
يعيد التابع العنصر الأخير الذي يحقق شرطًا معينًا. إذا كانت المجموعة فارغةً، فسيعيد التابع القيمة <code>null</code><syntaxhighlight lang="php">
: collect([1, 2, 3, 4])->last();


==== ()dump ====
// 4
يطبع التابع <code>dump</code> عناصر المجموعة:<syntaxhighlight lang="php">
$collection = collect(['John Doe', 'Jane Doe']);


$collection->dump();


/*
</syntaxhighlight>
===<code>()macro</code>===
يسمح التابع  بإضافة توابع للصنف <code>Collection</code> في وقت التشغيل. راجع التوثيق حول تمديد المجموعات لمزيد من المعلومات.
===<code>()make</code>===
يُنشِئ التابع  نسخة مجموعة جديدة. راجع قسم إنشاء المجموعات.
===<code>()map</code>===
يكرّر التابع عناصر المجموعة و يمرّر كل قيمة لدالة رد نداء معيّنة. يمكن لدالة رد اللنداء تغيير العنصر وإعادته، وبالتالي تكوين مجموعة جديدة من العناصر المغيّرة:<syntaxhighlight lang="php">
$collection = collect([1, 2, 3, 4, 5]);


  Collection {
$multiplied = $collection->map(function ($item, $key) {
      #items: array:2 [
          0 => "John Doe"
          1 => "Jane Doe"
      ]
  }
*/


</syntaxhighlight>
  return $item * 2;
 
إذا أردت إيقاف تنفيذ السكربت بعد تفريغ المجموعة فاستعمل التابع <code>dd</code>.
 
==== ()each ====
يكرّر التابع <code>each</code> عناصر المجموعة واحدًا بواحد ويمرّرها لدالة رد نداء:<syntaxhighlight lang="php">
$collection->each(function ($item, $key) {
 
  //
});
});


$multiplied->all();


</syntaxhighlight>
// [2, 4, 6, 8, 10
إذا أردت إيقاف التكرار، أعد القيمة <code>false</code> من دالة رد النداء:<syntaxhighlight lang="php">
$collection->each(function ($item, $key) {


  if (/* شرط إيقاف */) {
      return false;
  }
});


</syntaxhighlight><u>تنبيه</u>: كأغلب توابع المجموعات، يعيد <code>map</code> مجموعة جديدة ولا يغير المجموعة الأصلية. إذا أردت تغيير المجموعة الأصلية فاستعمل التابع <code>transform</code>.
===<code>()mapInfo</code>===
يكرّر التابع المجموعة وينشِئ نسخةً جديدةً من صنف معين عبر تمرير القيمة للتابع الباني للصنف:<syntaxhighlight lang="php">
class Currency {


</syntaxhighlight>
  /**
    * صناعة مثيل جديد.
    *
    * @param  string  $code
    * @return void
    */
  function __construct(string $code)
  {
      $this->code = $code;
  }
}


==== ()eachSpread ====
$collection = collect(['USD', 'EUR', 'GBP']);
يكرّّر التابع <code>eachSpread</code> عناصر المجموعة ويمرّر كل عنصر متداخل لدالة رد النداء:<syntaxhighlight lang="php">
$collection = collect([['John Doe', 35], ['Jane Doe', 33]]);


$collection->eachSpread(function ($name, $age) {
$currencies = $collection->mapInto(Currency::class);


  //
$currencies->all();
});


</syntaxhighlight>
// [Currency('USD'), Currency('EUR'), Currency('GBP')]


يمكنك إيقاف التكرار بإعادةالقيمة false من دالة رد النداء.<syntaxhighlight lang="php">
$collection->eachSpread(function ($name, $age) {


  return false;
</syntaxhighlight>
});
===<code>()mapSpread</code>===
يكرّر التابع عناصر المجموعة ويمرّر كل عنصر متداخل لدالة رد نداء. يمكن لدالة رد النداء تغيير العنصر وإعادته، وبالتالي تكوين مجموعة جديدة من العناصر المغيرة:<syntaxhighlight lang="php">
$collection = collect([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]);


$chunks = $collection->chunk(2);


</syntaxhighlight>
$sequence = $chunks->mapSpread(function ($odd, $even) {


==== ()every ====
   return $odd + $even;
يمكن استعمال التابع <code>every</code> للتأكد من أن كل عناصر المجموعة تحقق شرطًا معينًا:<syntaxhighlight lang="php">
collect([1, 2, 3, 4])->every(function ($value, $key) {
 
   return $value > 2;
});
});


// false
$sequence->all();


 
// [1, 5, 9, 13, 17]
</syntaxhighlight>
()except
 
يعيد التابع <code>except</code> كل عناصر المجموعة باستثناء العناصر بالمفاتيح المحدَّدة:<syntaxhighlight lang="php">
$collection = collect(['product_id' => 1, 'price' => 100, 'discount' => false]);
 
$filtered = $collection->except(['price', 'discount']);
 
$filtered->all();
 
// ['product_id' => 1]




</syntaxhighlight>
</syntaxhighlight>
===<code>()mapToGroups</code>===
يُجمّع التابع  عناصر المجموعة باستخدام دالة رد النداء المعيّنة. تعيد دالة رد النداء مصفوفة تجميعية تحتوي زوج المفتاح/القيمة واحد، وبالتالي تكوين مجموعة من القيم المجمَّعة:<syntaxhighlight lang="php">
$collection = collect([


لعكس وظيفة <code>except</code>، انظر التابع <code>only</code>.
  [
 
      'name' => 'John Doe',
==== ()filter ====
      'department' => 'Sales',
يرشِّح التابع <code>filter</code> عناصر المجموعة ويُبقي فقط العناصر التي تحقق شرطًا معينًا:<syntaxhighlight lang="php">
  ],
$collection = collect([1, 2, 3, 4]);
  [
      'name' => 'Jane Doe',
      'department' => 'Sales',
  ],
  [
      'name' => 'Johnny Doe',
      'department' => 'Marketing',
  ]
]);


$filtered = $collection->filter(function ($value, $key) {
$grouped = $collection->mapToGroups(function ($item, $key) {


   return $value > 2;
   return [$item['department'] => $item['name']];
});
});


$filtered->all();
$grouped->toArray();


// [3, 4]
/*


  [
      'Sales' => ['John Doe', 'Jane Doe'],
      'Marketing' => ['Johhny Doe'],
  ]
*/
$grouped->get('Sales')->all();


</syntaxhighlight>
// ['John Doe', 'Jane Doe']


إذا لم توفّر نداء للتابع، يحذف <code>filter</code> كل العناصر المساوية للقيمة <code>false</code>:
<syntaxhighlight lang="php">
$collection = collect([1, 2, 3, null, false, , 0, []]);


$collection->filter()->all();
</syntaxhighlight>
===<code>()mapWithKeys</code>===
يكرّر التابع المجموعة ويمرّر القيم لدالة رد نداء معيّنة. يعيد التابع مصفوفة تجميعية تحتوي زوج المفتاح/القيمة واحد:<syntaxhighlight lang="php">
$collection = collect([


// [1, 2, 3]
  [
      'name' => 'John',
      'department' => 'Sales',
      'email' => 'john@example.com'
  ],
  [
      'name' => 'Jane',
      'department' => 'Marketing',
      'email' => 'jane@example.com'
  ]
]);


$keyed = $collection->mapWithKeys(function ($item) {


</syntaxhighlight>
  return [$item['email'] => $item['name']];
});


لعكس وظيفة <code>filter</code> انظر التابع <code>reject</code>.
$keyed->all();


==== ()first ====
/*
يرجع التابع <code>first</code> العنصر الأول من المجموعة الذي يحقق شرطًا معينًا:<syntaxhighlight lang="php">
collect([1, 2, 3, 4])->first(function ($value, $key) {
 
  return $value > 2;
}); // 3


  [
      'john@example.com' => 'John',
      'jane@example.com' => 'Jane',
  ]
*/


</syntaxhighlight>
</syntaxhighlight>
===<code>()max</code>===
يعيد التابع القيمة القصوى في لمفتاح معين:<syntaxhighlight lang="php">
$max = collect([['foo' => 10], ['foo' => 20]])->max('foo');


يمكنك أيضًا استدعاء التابع <code>first</code> دون معامل، وسيعيد العنصر الأول من المجموعة، وإذا كانت المجموعة فارغةً، فستعاد القيمة <code>null</code>:
// 20 $max = collect([1, 2, 3, 4, 5])->max();  
<syntaxhighlight lang="php">
// 5
collect([1, 2, 3, 4])->first();
 
// 1




</syntaxhighlight>
</syntaxhighlight>
===<code>()median</code>===
يعيد التابع القيمة الوسطية للمفتاح المعين:<syntaxhighlight lang="php">
$median = collect([['foo' => 10], ['foo' => 10], ['foo' => 20], ['foo' => 40]])->median('foo');


==== ()firstWhere ====
// 15
يعيد التابع <code>firstWhere</code> العنصر الأول من المجموعة الموافق لزوج المفتاح/القيمة الممرّر:<syntaxhighlight lang="php">
$collection = collect([


  ['name' => 'Regena', 'age' => 12],
$median = collect([1, 1, 2, 4])->median();
  ['name' => 'Linda', 'age' => 14],
  ['name' => 'Diego', 'age' => 23],
  ['name' => 'Linda', 'age' => 84],
]);


$collection->firstWhere('name', 'Linda');
// 1.5
 
// ['name' => 'Linda', 'age' => 14]




</syntaxhighlight>
</syntaxhighlight>
===<code>()merge</code>===
يدمج التابع المصفوفة أو المجموعة الممرّرة مع المجموعة الأصلية، تلغي القيم الممرّرة القيم الأصلية:<syntaxhighlight lang="php">
$collection = collect(['product_id' => 1, 'price' => 100]);
$merged = $collection->merge(['price' => 200, 'discount' => false]);
$merged->all();


يمكن أيضًا استعمال التابع مع عامل مقارنة:<syntaxhighlight lang="php">
// ['product_id' => 1, 'price' => 200, 'discount' => false]
$collection->firstWhere('age', '>=', 18);


// ['name' => 'Diego', 'age' => 23]


</syntaxhighlight>إذا كانت المفاتيح الممرّرة رقمية، تضاف القيم في آخر المجموعة:<syntaxhighlight lang="php">
$collection = collect(['Desk', 'Chair']);
$merged = $collection->merge(['Bookcase', 'Door']);
$merged->all();


</syntaxhighlight>
// ['Desk', 'Chair', 'Bookcase', 'Door']


==== ()flatMap ====
ينفذ التابع <code>flatMap</code> حلقة تكرار في المجموعة، فيمرر قيمة كل تكرار لنداء معين. يمكن للنداء تغيير العنصر وإرجاعه وبالتالي يكوّن مجموعةً جديدة من العناصر المغيَّرة. ثم تُسطَّح المجموعة حسب مستواها:<syntaxhighlight lang="php">
$collection = collect([


  ['name' => 'Sally'],
</syntaxhighlight>
  ['school' => 'Arkansas'],
===<code>()min</code>===
  ['age' => 28]
يعيد التابع القيمة الأصغر لمفتاح معين:<syntaxhighlight lang="php">
]);
$min = collect([['foo' => 10], ['foo' => 20]])->min('foo');


$flattened = $collection->flatMap(function ($values) {
// 10


  return array_map('strtoupper', $values);
$min = collect([1, 2, 3, 4, 5])->min();
});


$flattened->all();
// 1
 
// ['name' => 'SALLY', 'school' => 'ARKANSAS', 'age' => '28'];




</syntaxhighlight>
</syntaxhighlight>
===<code>()mode</code>===
يعيد التابع قيمة المنوال لمفتاح معين:<syntaxhighlight lang="php">
$mode = collect([['foo' => 10], ['foo' => 10], ['foo' => 20], ['foo' => 40]])->mode('foo');


==== ()flatten ====
// [10]
يُسطِّح التابع <code>flatten</code> مجموعة متعددة الأبعاد لمجموعة ذات بعد واحد:<syntaxhighlight lang="php">
$collection = collect(['name' => 'taylor', 'languages' => ['php', 'javascript']]);


$flattened = $collection->flatten();
$mode = collect([1, 1, 2, 4])->mode();


$flattened->all();
// [1]


// ['taylor', 'php', 'javascript'];
</syntaxhighlight>يمكنك أيضًا تمرير معامل لضبط عمق التسطيح:<syntaxhighlight lang="php">
$collection = collect([


  'Apple' => [
</syntaxhighlight>
      ['name' => 'iPhone 6S', 'brand' => 'Apple'],
===<code>()nth</code>===
  ],
ينشِئ التابع مجموعةً جديدةً متكونةً من كل عنصر بعد n عناصر<syntaxhighlight lang="php">
  'Samsung' => [
$collection = collect(['a', 'b', 'c', 'd', 'e', 'f']);
      ['name' => 'Galaxy S7', 'brand' => 'Samsung']
  ],
]);


$products = $collection->flatten(1);
$collection->nth(4);


$products->values()->all();
// ['a', 'e']


/*


  [
</syntaxhighlight>يمكنك تمرير موضع البداية كمعامل ثاني:<syntaxhighlight lang="php">
      ['name' => 'iPhone 6S', 'brand' => 'Apple'],
$collection->nth(4, 1);
      ['name' => 'Galaxy S7', 'brand' => 'Samsung'],
  ]


</syntaxhighlight>في هذا المثال، سيتسبب عدم توفير عمق في تسطيح المصفوفات الداخلية لتصبح النتيجة <code>['iPhone 6S', 'Apple', 'Galaxy S7', 'Samsung']</code>. مما يوفّر مستوى عمق يسمح بتحديد مستوى التداخل الذي سيتم تسطيحه.
// ['b', 'f']


==== ()flip ====
يُبدِّل التابع <code>flip</code> المفتاح بقيمته:<syntaxhighlight lang="php">
$collection = collect(['name' => 'taylor', 'framework' => 'laravel']);


$flipped = $collection->flip();
$flipped->all();
// ['taylor' => 'name', 'laravel' => 'framework']
</syntaxhighlight>
</syntaxhighlight>
===<code>()only</code>===
يعيد التابع العناصر في المجموعة ذات المفاتيح الممرّرة:<syntaxhighlight lang="php">
$collection->nth(4, 1);


==== ()forget ====
// ['b', 'f']
يحذف التابع <code>forget</code> عنصرًا من المجموعة باستخدام مفتاحه:<syntaxhighlight lang="php">
$collection = collect(['name' => 'taylor', 'framework' => 'laravel']);


$collection->forget('name');


$collection->all();
</syntaxhighlight>لعكس وظيفة <code>only</code>، استعمل التابع <code>expect</code>.
===<code>()pad</code>===
يملأ التابع المصفوفة بالقيمة الممرّرة حتى تصل للحجم المحدد. يشبه هذا التابع دالة <code>array_pad</code> في PHP.<syntaxhighlight lang="php">
$collection = collect(['A', 'B', 'C']);
$filtered = $collection->pad(5, 0);
$filtered->all();


// ['framework' => 'laravel']
// ['A', 'B', 'C', 0, 0]
</syntaxhighlight><u>تنبيه</u>: على عكس جل توابع المجموعات، لا يعيد <code>forget</code> مجموعةً جديدةً بل يغيّر في المجموعة التي استدعي هذا التابع عليها.


==== ()forPage ====
$filtered = $collection->pad(-5, 0);
يعيد التابع <code>forPage</code> مجموعة تحتوي العناصر الموجودة في رقم الصفحة الممرّر. يقبل التابع رقم صفحة كمعامل أول وعدد العناصر التي يجب إظهارها في الصفحة كمعامل ثاني:<syntaxhighlight lang="php">
$filtered->all();
$collection = collect([1, 2, 3, 4, 5, 6, 7, 8, 9]);


$chunk = $collection->forPage(2, 3);
// [0, 0, 'A', 'B', 'C']


$chunk->all();
// [4, 5, 6]


</syntaxhighlight>
</syntaxhighlight>
===<code>()partition</code>===
يمكن استعمال التابع مع الدالة <code>list</code> في PHP لتفريق العناصر التي تجتاز شرط صحة عن البقية:<syntaxhighlight lang="php">
$collection = collect([1, 2, 3, 4, 5, 6]);


==== ()get ====
list($underThree, $equalOrAboveThree) = $collection->partition(function ($i) {
يعيد التابع get قيمة العنصر ذي المفتاح المُمرَّر إلى التابع. إذا كان المفتاح غير موجود فستعاد القيمة <code>null</code>:
<syntaxhighlight lang="php">
$collection = collect(['name' => 'taylor', 'framework' => 'laravel']);


$value = $collection->get('name');
  return $i < 3;
});


// taylor
$underThree->all();


// [1, 2]


</syntaxhighlight>يمكنك تمرير قيمة أولية اختيارية كمعامل ثاني:<syntaxhighlight lang="php">
$equalOrAboveThree->all();
$collection = collect(['name' => 'taylor', 'framework' => 'laravel']);


$value = $collection->get('foo', 'default-value');
// [3, 4, 5, 6]


// default-value


</syntaxhighlight>
</syntaxhighlight>
===<code>pipe()‎</code>===
يمرّر التابع المجموعة لنداء معين ويعيد نتيجة دالة رد النداء:<syntaxhighlight lang="php">
$collection = collect([1, 2, 3]);


يمكنك حتى تمرير دالة رد نداء. تُعاد القيمة المُعادة من دالة رد النداء في حال عدم وجود المفتاح:<syntaxhighlight lang="php">
$piped = $collection->pipe(function ($collection) {
$collection->get('email', function () {


   return 'default-value';
   return $collection->sum();
});
});


// default-value
// 6
 


</syntaxhighlight>
</syntaxhighlight>
 
===<code>()pluck</code>===
==== ()groupBy ====
يسترجع التابع كل القيم من مفتاح ممرّر:<syntaxhighlight lang="php">
يُجمِّع التابع <code>groupBy</code> العناصر حسب قيمة المفتاح الممرّر إلى التابع:<syntaxhighlight lang="php">
$collection = collect([
$collection = collect([


   ['account_id' => 'account-x10', 'product' => 'Chair'],
   ['product_id' => 'prod-100', 'name' => 'Desk'],
   ['account_id' => 'account-x10', 'product' => 'Bookcase'],
   ['product_id' => 'prod-200', 'name' => 'Chair'],
  ['account_id' => 'account-x11', 'product' => 'Desk'],
]);
]);


$grouped = $collection->groupBy('account_id');
$plucked = $collection->pluck('name');
 
$plucked->all();


$grouped->toArray();
// ['Desk', 'Chair']


/*


  [
</syntaxhighlight>يمكنك أيضا تحديد مفاتيح المجموعة الناتجة:<syntaxhighlight lang="php">
      'account-x10' => [
$plucked = $collection->pluck('name', 'product_id');
          ['account_id' => 'account-x10', 'product' => 'Chair'],
          ['account_id' => 'account-x10', 'product' => 'Bookcase'],
      ],
      'account-x11' => [
          ['account_id' => 'account-x11', 'product' => 'Desk'],
      ],
  ]
*/


</syntaxhighlight>
$plucked->all();
بدل تمرير سلسلة محارف <code>key</code>، يمكنك تمرير دالة رد نداء التي يجب أن تعيد القيمة التي تريد أن تكون مفتاح التجميع:<syntaxhighlight lang="php">
$grouped = $collection->groupBy(function ($item, $key) {


  return substr($item['account_id'], -3);
// ['prod-100' => 'Desk', 'prod-200' => 'Chair']
});


$grouped->toArray();


/*
</syntaxhighlight>إذا وُجدت مفاتيح متشابهة، فسيضاف العنصر الأخير الموافق للمفتاح:<syntaxhighlight lang="php">
$collection = collect([


   [
   ['brand' => 'Tesla',  'color' => 'red'],
      'x10' => [
  ['brand' => 'Pagani', 'color' => 'white'],
          ['account_id' => 'account-x10', 'product' => 'Chair'],
  ['brand' => 'Tesla', 'color' => 'black'],
          ['account_id' => 'account-x10', 'product' => 'Bookcase'],
  ['brand' => 'Pagani', 'color' => 'orange'],
      ],
]);
      'x11' => [
          ['account_id' => 'account-x11', 'product' => 'Desk'],
      ],
  ]
*/


$plucked = $collection->pluck('color', 'brand');


</syntaxhighlight>
$plucked->all();
يمكن تمرير عدة معايير تجميع كمصفوفة، يُطبّق كل عنصر من المصفوفة على مستوى العمق الملائم في مصفوفة متعددة الأبعاد:<syntaxhighlight lang="php">
$data = new Collection([


  10 => ['user' => 1, 'skill' => 1, 'roles' => ['Role_1', 'Role_3']],
// ['Tesla' => 'black', 'Pagani' => 'orange']
  20 => ['user' => 2, 'skill' => 1, 'roles' => ['Role_1', 'Role_2']],
  30 => ['user' => 3, 'skill' => 2, 'roles' => ['Role_1']],
  40 => ['user' => 4, 'skill' => 2, 'roles' => ['Role_2']],
]);


$result = $data->groupBy([


  'skill',
</syntaxhighlight>
  function ($item) {
===<code>()pop</code>===
      return $item['roles'];
يحذف التابع العنصر الأخير من المجموعة ويعيده:<syntaxhighlight lang="php">
  },
$collection = collect([1, 2, 3, 4, 5]);
], $preserveKeys = true);
 
$collection->pop();
 
// 5
 
$collection->all();
 
// [1, 2, 3, 4]


/* [


  1 => [
</syntaxhighlight>
      'Role_1' => [
===<code>()prepend</code>===
          10 => ['user' => 1, 'skill' => 1, 'roles' => ['Role_1', 'Role_3']],
يضيف التابع عناصر في أول المجموعة:<syntaxhighlight lang="php">
          20 => ['user' => 2, 'skill' => 1, 'roles' => ['Role_1', 'Role_2']],
$collection = collect([1, 2, 3, 4, 5]);
      ],
$collection->prepend(0);
      'Role_2' => [
$collection->all();
          20 => ['user' => 2, 'skill' => 1, 'roles' => ['Role_1', 'Role_2']],
      ],
      'Role_3' => [
          10 => ['user' => 1, 'skill' => 1, 'roles' => ['Role_1', 'Role_3']],
      ],
  ],
  2 => [
      'Role_1' => [
          30 => ['user' => 3, 'skill' => 2, 'roles' => ['Role_1']],
      ],
      'Role_2' => [
          40 => ['user' => 4, 'skill' => 2, 'roles' => ['Role_2']],
      ],
  ],
];


*/
// [0, 1, 2, 3, 4, 5]




</syntaxhighlight>
</syntaxhighlight>يمكنك تمرير معامل ثاني لتحديد مفتاح العناصر المضافة:<syntaxhighlight lang="php">
$collection = collect(['one' => 1, 'two' => 2]);


==== ()has ====
$collection->prepend(0, 'zero');
يحدد التابع <code>has</code> إذا كان المفتاح موجودًا في المجموعة أم لا:<syntaxhighlight lang="php">
$collection = collect(['account_id' => 1, 'product' => 'Desk']);


$collection->has('product');
$collection->all();


// true
// ['zero' => 0, 'one' => 1, 'two' => 2]




</syntaxhighlight>
</syntaxhighlight>
===<code>()pull</code>===
يحذف التابع عنصرًا من المجموعة ويعيده وذلك باستعمال مفتاحه:<syntaxhighlight lang="php">
$collection = collect(['product_id' => 'prod-100', 'name' => 'Desk']);


==== ()implode ====
$collection->pull('name');
يضم التابع <code>implode</code> عناصر المجموعة في سلسلة حرفية. تعتمد التوابع على نوع العناصر في المجموعة. إذا كانت المجموعة تحتوي مصفوفات أو كائنات، يجب تمرير مفتاح الخاصيات التي تريد ضمّها وعلامة الربط "glue" الذي تريد استعماله بين القيم:<syntaxhighlight lang="php">
$collection = collect([


  ['account_id' => 1, 'product' => 'Desk'],
// 'Desk'
  ['account_id' => 2, 'product' => 'Chair'],
]);


$collection->implode('product', ', ');
$collection->all();


// Desk, Chair
// ['product_id' => 'prod-100']




</syntaxhighlight>
</syntaxhighlight>
===<code>()push</code>===
يضيف التابع عنصرًا في آخر المجموعة:<syntaxhighlight lang="php">
$collection = collect([1, 2, 3, 4]);
$collection->push(5);


إذا كانت المجموعة تحتوي سلاسل نصية أو قيمًا رقميةً بسيطةً، فمرّر علامة الربط فقط كمعامل إلى التابع:<syntaxhighlight lang="php">
$collection->all();
collect([1, 2, 3, 4, 5])->implode('-');


// '1-2-3-4-5'
// [1, 2, 3, 4, 5]




</syntaxhighlight>
</syntaxhighlight>
===<code>()put</code>===
يضع التابع المفتاح والقيمة في المجموعة:<syntaxhighlight lang="php">
$collection = collect(['product_id' => 1, 'name' => 'Desk']);
$collection->put('price', 100);
$collection->all();


==== ()intersect ====
// ['product_id' => 1, 'name' => 'Desk', 'price' => 100]
يحذف التابع <code>intersect</code> أي قيمة في المجموعة الأصلية غير موجودة في المجموعة أو المصفوفة الممرّرة. تحافظ المجموعة النهائية على مفاتيح المجموعة الأصلية:<syntaxhighlight lang="php">
$collection = collect(['Desk', 'Sofa', 'Chair']);


$intersect = $collection->intersect(['Desk', 'Chair', 'Bookcase']);


$intersect->all();
</syntaxhighlight>
===<code>()random</code>===
يعيد التابع عنصرًا عشوائيًا من المجموعة:<syntaxhighlight lang="php">
$collection = collect([1, 2, 3, 4, 5]);
$collection->random();


// [0 => 'Desk', 2 => 'Chair']
// 4 - (retrieved randomly)




</syntaxhighlight>
</syntaxhighlight>يمكنك اختيار تمرير عدد للتابع لتحديد عدد العناصر التي تريد إعادتها عشوائيًا. يعيد التابع مجموعة في حال تمرير عدد العناصر المطلوبة:<syntaxhighlight lang="php">
$random = $collection->random(3);


==== ()intersectByKeys ====
$random->all();
يحذف التابع أي مفتاح من المجموعة الأصلية غير موجود في المجموعة أو المصفوفة الممرّرة:<syntaxhighlight lang="php">
$collection = collect([


  'serial' => 'UX301', 'type' => 'screen', 'year' => 2009
// [2, 4, 5] - (retrieved randomly)
]);


$intersect = $collection->intersectByKeys([


  'reference' => 'UX404', 'type' => 'tab', 'year' => 2011
</syntaxhighlight>إذا كان عدد العناصر في المجموعة أقل من المطلوب فسيُطلق التابع الاستثناء <code>InvalidArgumentException</code>.
]);
===<code>()reduce</code>===
يقلص التابع المجموعة لعنصر واحد بتمرير نتيجة كل تكرار نداء للتكرار الموالي:<syntaxhighlight lang="php">
$collection = collect([1, 2, 3]);


$intersect->all();
$total = $collection->reduce(function ($carry, $item) {
  return $carry + $item;
});


// ['type' => 'screen', 'year' => 2009]
// 6




</syntaxhighlight>
</syntaxhighlight>قيمة <code>carry$</code> في التكرار الأول <code>null</code>، لكن بإمكانك تمرير قيمة الأولية يرجعها التابع بدل <code>null</code> كمعامل ثاني للتابع:<syntaxhighlight lang="php">
$collection->reduce(function ($carry, $item) {


==== ()isEmpty ====
  return $carry + $item;
يعيد التابع <code>isEmpty</code> القيمة <code>true</code> إذا كانت المجموعة فارغة وإلا فسيعيد <code>false</code>:<syntaxhighlight lang="php">
}, 4);
collect([])->isEmpty();


// true
// 10




</syntaxhighlight>
</syntaxhighlight>
===<code>()reject</code>===
يُستعمل التابع لترشيح المجموعة باستعمال دالة رد نداء معينة. يجب أن تعيد دالة رد النداء القيمة <code>true</code> ليُحذف العنصر من المجموعة الناتجة:<syntaxhighlight lang="php">
$collection = collect([1, 2, 3, 4]);


==== ()isNotEmpty ====
$filtered = $collection->reject(function ($value, $key) {
يعيد التابع <code>isNotEmpty</code> القيمة <code>true</code> إذا لم تكن المجموعة فارغة، وإلا فسيعيد <code>false</code>:<syntaxhighlight lang="php">
collect([])->isNotEmpty();


// false
  return $value > 2;
});


$filtered->all();


</syntaxhighlight>
// [1, 2]


==== ()keyBy ====
يضيف التابع <code>keyBy</code> مفاتيح للمجموعة، إذا وُجد أكثر من عنصر بنفس المفتاح، فسيضاف الأخير فقط إلى المجموعة الجديدة:<syntaxhighlight lang="php">
$collection = collect([


  ['product_id' => 'prod-100', 'name' => 'Desk'],
</syntaxhighlight>لعكس وظيفة <code>reject</code>، انظر التابع <code>filter</code>.
  ['product_id' => 'prod-200', 'name' => 'Chair'],
===<code>()reverse</code>===
]);
يعكس التابع ترتيب عناصر المجموعة محافظًا على المفاتيح الأصلية:<syntaxhighlight lang="php">
$collection = collect(['a', 'b', 'c', 'd', 'e']);


$keyed = $collection->keyBy('product_id');
$reversed = $collection->reverse();


$keyed->all();
$reversed->all();


/*
/*


   [
   [
       'prod-100' => ['product_id' => 'prod-100', 'name' => 'Desk'],
       4 => 'e',
       'prod-200' => ['product_id' => 'prod-200', 'name' => 'Chair'],
      3 => 'd',
      2 => 'c',
       1 => 'b',
      0 => 'a',
   ]
   ]
*/
*/


</syntaxhighlight>
</syntaxhighlight>
يمكنك تمرير نداء للتابع. يجب أن يعيد النداء القيمة التي ستستعمل كمفتاح للمجموعة:<syntaxhighlight lang="php">
===<code>()search</code>===
$keyed = $collection->keyBy(function ($item) {
يبحث التابع عن قيمة معينة ويعيد مفتاحها. إذا لم توجد القيمة المطلوبة فسيعيد التابع القيمة <code>false</code>:<syntaxhighlight lang="php">
$collection = collect([2, 4, 6, 8]);
$collection->search(4);


  return strtoupper($item['product_id']);
// 1
});


$keyed->all();


/*
</syntaxhighlight>يقارن هذا التابع مقارنة غير صارمة أي أن سلسلةً نصيةً تحتوي على رقمٍ تعدّ مساويةً للقيمة الرقمية. لاستعمال مقارنة صارمة، مرّر <code>true</code> كمعامل ثاني إلى التابع:<syntaxhighlight lang="php">
$collection->search('4', true);


  [
// false
      'PROD-100' => ['product_id' => 'prod-100', 'name' => 'Desk'],
      'PROD-200' => ['product_id' => 'prod-200', 'name' => 'Chair'],
  ]
*/


</syntaxhighlight>


==== ()keys ====
</syntaxhighlight>بشكلٍ بديل، يمكنك تمرير دالة رد النداء الخاصة بك للبحث عن العنصر الأول الذي يحقق شرط الصحة الذي تحدّده:<syntaxhighlight lang="php">
يعيد التابع مجموعة متكونة من كل المفاتيح:<syntaxhighlight lang="php">
$collection->search(function ($item, $key) {
$collection = collect([


   'prod-100' => ['product_id' => 'prod-100', 'name' => 'Desk'],
   return $item > 5;
  'prod-200' => ['product_id' => 'prod-200', 'name' => 'Chair'],
});
]);


$keys = $collection->keys();
// 2


$keys->all();


// ['prod-100', 'prod-200']
</syntaxhighlight>
===<code>()shift</code>===
يحذف التابع ويعيد العنصر الأول من المجموعة<syntaxhighlight lang="php">
$collection = collect([1, 2, 3, 4, 5]);


$collection->shift();


</syntaxhighlight>
// 1


==== ()last ====
$collection->all();
يعيد التابع <code>last</code> العنصر الأخير الذي يحقق شرطًا معينًا. إذا كانت المجموعة فارغةً، فسيعيد التابع القيمة <code>null</code><syntaxhighlight lang="php">
: collect([1, 2, 3, 4])->last();


// 4
// [2, 3, 4, 5]




</syntaxhighlight>
</syntaxhighlight>
===<code>()shuffle</code>===
يخلط التابع العناصر عشوائيًا:<syntaxhighlight lang="php">
$collection = collect([1, 2, 3, 4, 5]);


==== ()macro ====
$shuffled = $collection->shuffle();
يسمح التابع الثابت <code>macro</code> بإضافة توابع للصنف <code>Collection</code> في وقت التشغيل. راجع التوثيق حول تمديد المجموعات لمزيد من المعلومات.


==== ()make ====
$shuffled->all();
يُنشِئ التابع الساكن <code>make</code> نسخة مجموعة جديدة. راجع قسم إنشاء المجموعات.


==== ()map ====
// [3, 2, 5, 1, 4] - (generated randomly)  
يكرّر التابع عناصر المجموعة و يمرّر كل قيمة لدالة رد نداء معيّنة. يمكن لدالة رد اللنداء تغيير العنصر وإعادته، وبالتالي تكوين مجموعة جديدة من العناصر المغيّرة:<syntaxhighlight lang="php">
$collection = collect([1, 2, 3, 4, 5]);


$multiplied = $collection->map(function ($item, $key) {


  return $item * 2;
</syntaxhighlight>
});
===<code>()slice</code>===
يعيد التابع قطعة من المجموعة بدءًا من مكان محدّد:<syntaxhighlight lang="php">
$collection = collect([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);
$slice = $collection->slice(4);
$slice->all();


$multiplied->all();
// [5, 6, 7, 8, 9, 10]


// [2, 4, 6, 8, 10


</syntaxhighlight>إذا أردت تحديد حجم القطعة مرّر الحجم كمعامل ثاني للتابع:<syntaxhighlight lang="php">
$slice = $collection->slice(4, 2);


</syntaxhighlight>
$slice->all();


<u>تنبيه</u>: كأغلب توابع المجموعات، يعيد <code>map</code> مجموعة جديدة ولا يغير المجموعة الأصلية. إذا أردت تغيير المجموعة الأصلية فاستعمل التابع <code>transform</code>.
// [5, 6]


==== ()mapInfo ====
يكرّر التابع <code>mapInfo</code> المجموعة وينشِئ نسخةً جديدةً من صنف معين عبر تمرير القيمة للتابع الباني للصنف:<syntaxhighlight lang="php">
class Currency {


  /**
</syntaxhighlight>تحافظ القطعة على المفاتيح الأصلية، إذا لم ترد الحفاظ عليها فاستخدم التابع <code>values</code> لإعادة تسميتها.
    * صناعة مثيل جديد.
===<code>()sort</code>===
    *
يُرتِّب التابع المجموعة. تحافظ المجموعة الناتجة على المفاتيح الأصلية لذا سنستعمل في المثال التابع <code>values</code> لإعادة تعيين المفاتيح لأعداد متتالية:<syntaxhighlight lang="php">
    * @param  string  $code
$collection = collect([5, 3, 1, 2, 4]);
    * @return void
    */
  function __construct(string $code)
  {
      $this->code = $code;
  }
}


$collection = collect(['USD', 'EUR', 'GBP']);
$sorted = $collection->sort();


$currencies = $collection->mapInto(Currency::class);
$sorted->values()->all();


$currencies->all();
// [1, 2, 3, 4, 5]


// [Currency('USD'), Currency('EUR'), Currency('GBP')]


</syntaxhighlight>إذا احتجت ترتيبًا أكثر تعقيدًا، يمكنك تمرير دالة رد نداء للمنطق المتبع في طريقة الترتيب الخاصة بك. راجع توثيق الدالة <code>uasort</code> في PHP وهي طريقة الترتيب الذي يعتمدها التابع <code>sort</code> وراء الكواليس.


</syntaxhighlight>
'''ملاحظة:''' إذا احتجت إلى ترتيب مجموعة مصفوفات متداخلة أو كائنات فراجع التابعين <code>sortBy</code> و <code>sortByDesc</code>.
===<code>()sortBy</code>===
يرتب التابع المجموعة حسب مفتاح ممرّر. تحافظ المجموعة المرتَّبة على المفاتيح الأصلية لذا في هذا المثال سنستعمل التابع values لإعادة تعيين المفاتيح لأعداد متتالية:<syntaxhighlight lang="php">
$collection = collect([


==== ()mapSpread ====
  ['name' => 'Desk', 'price' => 200],
يكرّر التابع عناصر المجموعة ويمرّر كل عنصر متداخل لدالة رد نداء. يمكن لدالة رد النداء تغيير العنصر وإعادته، وبالتالي تكوين مجموعة جديدة من العناصر المغيرة:<syntaxhighlight lang="php">
  ['name' => 'Chair', 'price' => 100],
$collection = collect([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]);
  ['name' => 'Bookcase', 'price' => 150],
]);


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


$sequence = $chunks->mapSpread(function ($odd, $even) {
$sorted->values()->all();


  return $odd + $even;
/*
});


$sequence->all();
  [
      ['name' => 'Chair', 'price' => 100],
      ['name' => 'Bookcase', 'price' => 150],
      ['name' => 'Desk', 'price' => 200],
  ]
*/


// [1, 5, 9, 13, 17]
</syntaxhighlight>يمكنك تمرير دالة رد النداء الخاصة بك لتحديد طريقة الترتيب:<syntaxhighlight lang="php">
 
 
</syntaxhighlight>
 
==== ()mapToGroups ====
يُجمّع التابع <code>mapToGroups</code> عناصر المجموعة باستخدام دالة رد النداء المعيّنة. تعيد دالة رد النداء مصفوفة تجميعية تحتوي زوج المفتاح/القيمة واحد، وبالتالي تكوين مجموعة من القيم المجمَّعة: <syntaxhighlight lang="php">
$collection = collect([
$collection = collect([


   [
   ['name' => 'Desk', 'colors' => ['Black', 'Mahogany']],
      'name' => 'John Doe',
   ['name' => 'Chair', 'colors' => ['Black']],
      'department' => 'Sales',
   ['name' => 'Bookcase', 'colors' => ['Red', 'Beige', 'Brown']],
  ],
   [
      'name' => 'Jane Doe',
      'department' => 'Sales',
  ],
   [
      'name' => 'Johnny Doe',
      'department' => 'Marketing',
  ]
]);
]);


$grouped = $collection->mapToGroups(function ($item, $key) {
$sorted = $collection->sortBy(function ($product, $key) {


   return [$item['department'] => $item['name']];
   return count($product['colors']);
});
});


$grouped->toArray();
$sorted->values()->all();


/*
/*


   [
   [
       'Sales' => ['John Doe', 'Jane Doe'],
       ['name' => 'Chair', 'colors' => ['Black']],
       'Marketing' => ['Johhny Doe'],
      ['name' => 'Desk', 'colors' => ['Black', 'Mahogany']],
       ['name' => 'Bookcase', 'colors' => ['Red', 'Beige', 'Brown']],
   ]
   ]
*/
*/
$grouped->get('Sales')->all();


// ['John Doe', 'Jane Doe']
</syntaxhighlight>
 
===<code>()sortByDesc</code>===
 
هذا التابع شبيه بالتابع <code>sortBy</code> لكنه يرتب العناصر ترتيبًا معاكسًا.
</syntaxhighlight>
===<code>()sortKeys</code>===
 
يرتب التابع المجموعة حسب مفاتيح المصفوفة المعالجة:<syntaxhighlight lang="php">
==== ()mapWithKeys ====
يكرّر التابع <code>mapWithKeys</code> المجموعة ويمرّر القيم لدالة رد نداء معيّنة. يعيد التابع مصفوفة تجميعية تحتوي زوج المفتاح/القيمة واحد:<syntaxhighlight lang="php">
$collection = collect([
$collection = collect([


   [
   'id' => 22345,
      'name' => 'John',
  'first' => 'John',
      'department' => 'Sales',
   'last' => 'Doe',
      'email' => 'john@example.com'
  ],
   [
      'name' => 'Jane',
      'department' => 'Marketing',
      'email' => 'jane@example.com'
  ]
]);
]);


$keyed = $collection->mapWithKeys(function ($item) {
$sorted = $collection->sortKeys();


  return [$item['email'] => $item['name']];
$sorted->all();
});
 
$keyed->all();


/*
/*


   [
   [
       'john@example.com' => 'John',
       'first' => 'John',
       'jane@example.com' => 'Jane',
       'id' => 22345,
      'last' => 'Doe',
   ]
   ]
*/
*/


</syntaxhighlight>
</syntaxhighlight>
===<code>()sortKeysDesc</code>===
هذا التابع شبيه بالتابع <code>sortKeys</code> لكنه يرتّب المجموعة ترتيبًا معاكسًا.
===<code>()splice</code>===
يحذف التابع ويعيد قطعةً من المجموعة بدءًا من موضع محدّد:<syntaxhighlight lang="php">
$collection = collect([1, 2, 3, 4, 5]);
$chunk = $collection->splice(2);
$chunk->all();


==== ()max ====
// [3, 4, 5]
يعيد التابع القيمة القصوى في لمفتاح معين:<syntaxhighlight lang="php">
$max = collect([['foo' => 10], ['foo' => 20]])->max('foo');


// 20 $max = collect([1, 2, 3, 4, 5])->max();  
$collection->all();
// 5


// [1, 2]


</syntaxhighlight>


==== ()median ====
</syntaxhighlight>يمكنك تمرير معامل ثاني لتحديد حجم القطعة:<syntaxhighlight lang="php">
يعيد التابع <code>median</code> القيمة الوسطية للمفتاح المعين:<syntaxhighlight lang="php">
$collection = collect([1, 2, 3, 4, 5]);
$median = collect([['foo' => 10], ['foo' => 10], ['foo' => 20], ['foo' => 40]])->median('foo');


// 15
$chunk = $collection->splice(2, 1);


$median = collect([1, 1, 2, 4])->median();
$chunk->all();


// 1.5
// [3]


$collection->all();


</syntaxhighlight>
// [1, 2, 4, 5]


==== ()merge ====
يدمج التابع <code>merge</code> المصفوفة أو المجموعة الممرّرة مع المجموعة الأصلية، تلغي القيم الممرّرة القيم الأصلية:<syntaxhighlight lang="php">
$collection = collect(['product_id' => 1, 'price' => 100]);


$merged = $collection->merge(['price' => 200, 'discount' => false]);
</syntaxhighlight>يمكنك أيضًا تمرير معامل ثالث يحتوي عناصر جديدة لتعويض العناصر المحذوفة من المجموعة الأصلية:<syntaxhighlight lang="php">
$collection = collect([1, 2, 3, 4, 5]);
$chunk = $collection->splice(2, 1, [10, 11]);
$chunk->all();
 
// [3]


$merged->all();
$collection->all();


// ['product_id' => 1, 'price' => 200, 'discount' => false]
// [1, 2, 10, 11, 4, 5]




</syntaxhighlight>
</syntaxhighlight>
===<code>()split</code>===
يقسم التابع المجموعة لعدد ممرّر من المجموعات:<syntaxhighlight lang="php">
$collection = collect([1, 2, 3, 4, 5]);


إذا كانت المفاتيح الممرّرة رقمية، تضاف القيم في آخر المجموعة:<syntaxhighlight lang="php">
$groups = $collection->split(3);
$collection = collect(['Desk', 'Chair']);


$merged = $collection->merge(['Bookcase', 'Door']);
$groups->toArray();


$merged->all();
// [[1, 2], [3, 4], [5]]
 
// ['Desk', 'Chair', 'Bookcase', 'Door']




</syntaxhighlight>
</syntaxhighlight>
===<code>()sum</code>===
يعيد التابع مجموع عناصر المجموعة:<syntaxhighlight lang="php">
collect([1, 2, 3, 4, 5])->sum();


==== ()min ====
// 15
يعيد التابع <code>min</code> القيمة الأصغر لمفتاح معين:<syntaxhighlight lang="php">
$min = collect([['foo' => 10], ['foo' => 20]])->min('foo');


// 10


$min = collect([1, 2, 3, 4, 5])->min();
</syntaxhighlight>إذا كانت المجموعة تحتوي مصفوفات متداخلة، يجب تمرير مفتاح لتحديد العناصر التي يجب جمعها:<syntaxhighlight lang="php">
$collection = collect([


// 1
  ['name' => 'JavaScript: The Good Parts', 'pages' => 176],
  ['name' => 'JavaScript: The Definitive Guide', 'pages' => 1096],
]);


$collection->sum('pages');


</syntaxhighlight>
// 1272


==== ()mode ====
يعيد التابع قيمة المنوال لمفتاح معين:
<syntaxhighlight lang="php">
$mode = collect([['foo' => 10], ['foo' => 10], ['foo' => 20], ['foo' => 40]])->mode('foo');


// [10]
</syntaxhighlight>يمكنك أيضًا تمرير دالة رد نداء خاصة بك لتحديد أي القيم ستُجمَع:<syntaxhighlight lang="php">
$collection = collect([


$mode = collect([1, 1, 2, 4])->mode();
  ['name' => 'Chair', 'colors' => ['Black']],
  ['name' => 'Desk', 'colors' => ['Black', 'Mahogany']],
  ['name' => 'Bookcase', 'colors' => ['Red', 'Beige', 'Brown']],
]);


// [1]
$collection->sum(function ($product) {


  return count($product['colors']);
});


</syntaxhighlight>
// 6


==== ()nth ====
ينشِئ التابع <code>nth</code> مجموعةً جديدةً متكونةً من كل عنصر بعد n عناصر <syntaxhighlight lang="php">
$collection = collect(['a', 'b', 'c', 'd', 'e', 'f']);


$collection->nth(4);
</syntaxhighlight>
===<code>()take</code>===
يعيد التابع مجموعةً جديدةً ذاتُ عناصرٍ محددّة:<syntaxhighlight lang="php">
$collection = collect([0, 1, 2, 3, 4, 5]);
$chunk = $collection->take(3);
$chunk->all();


// ['a', 'e']
// [0, 1, 2]




</syntaxhighlight>
</syntaxhighlight>يمكنك تمرير عدد سالب لأخذ عدد من العناصر من آخر المجموعة:<syntaxhighlight lang="php">
$collection = collect([0, 1, 2, 3, 4, 5]);
 
$chunk = $collection->take(-2);


يمكنك تمرير موضع البداية كمعامل ثاني:<syntaxhighlight lang="php">
$chunk->all();
$collection->nth(4, 1);


// ['b', 'f']
// [4, 5]




</syntaxhighlight>
</syntaxhighlight>
===<code>()tap</code>===
يمرّر التابع المجموعة لدالة رد نداء معيّنة. ويسمح لك بالدخول للمجموعة من نقطة محدّدة والقيام بعمل ما على العنصر دون المساس بالمجموعة ككل:<syntaxhighlight lang="php">
collect([2, 4, 3, 1, 5])


==== ()only ====
  ->sort()
يعيد التابع <code>only</code> العناصر في المجموعة ذات المفاتيح الممرّرة:<syntaxhighlight lang="php">
  ->tap(function ($collection) {
$collection->nth(4, 1);
      Log::debug('Values after sorting', $collection->values()->toArray());
 
  })
// ['b', 'f']
  ->shift();
// 1




</syntaxhighlight>
</syntaxhighlight>
===<code>()times</code>===
يُنشِئ التابع الساكن مجموعة جديدة عبر استعمال دالة رد نداء عددًا محددًا من المرات:<syntaxhighlight lang="php">
$collection = Collection::times(10, function ($number) {


لعكس وظيفة <code>only</code>، استعمل التابع <code>expect</code>.
  return $number * 9;
});


==== ()pad ====
$collection->all();
يملأ التابع <code>pad</code> المصفوفة بالقيمة الممرّرة حتى تصل للحجم المحدد. يشبه هذا التابع دالة <code>array_pad</code> في PHP.<syntaxhighlight lang="php">
$collection = collect(['A', 'B', 'C']);


$filtered = $collection->pad(5, 0);
// [9, 18, 27, 36, 45, 54, 63, 72, 81, 90]


$filtered->all();


// ['A', 'B', 'C', 0, 0]
</syntaxhighlight>يكون هذا التابع مفيدًا عند استعماله مع المصانع لإنشاء نماذج Eloquent:<syntaxhighlight lang="php">
$categories = Collection::times(3, function ($number) {


$filtered = $collection->pad(-5, 0);
  return factory(Category::class)->create(['name' => 'Category #'.$number]);
});


$filtered->all();
$categories->all();


// [0, 0, 'A', 'B', 'C']
/*


  [
      ['id' => 1, 'name' => 'Category #1'],
      ['id' => 2, 'name' => 'Category #2'],
      ['id' => 3, 'name' => 'Category #3'],
  ]
*/


</syntaxhighlight>
</syntaxhighlight>
===<code>()toArray</code>===
يحوّل التابع المجموعة لمصفوفة PHP. إذا كانت مكوّنات المجموعة نماذج Eloquent، تتحوّل النماذج أيضا لمصفوفات:<syntaxhighlight lang="php">
$collection = collect(['name' => 'Desk', 'price' => 200]);


==== ()partition ====
$collection->toArray();
يمكن استعمال التابع <code>partition</code> مع الدالة <code>list</code> في PHP لتفريق العناصر التي تجتاز شرط صحة عن البقية:<syntaxhighlight lang="php">
$collection = collect([1, 2, 3, 4, 5, 6]);


list($underThree, $equalOrAboveThree) = $collection->partition(function ($i) {
/*


   return $i < 3;
   [
});
      ['name' => 'Desk', 'price' => 200],
  ]
*/


$underThree->all();
</syntaxhighlight><u>تنبيه</u>: يحوّل <code>toArray</code> كل الكائنات المتداخلة في المجموعة لمصفوفات. إذا أردت الحصول على المصفوفة الخام استعمل التابع <code>all</code> بدلًا منه.
===<code>()toJson</code>===
يحوّل التابع <code>toJson</code> المجموعة لسلسلة <code>JSON</code>:<syntaxhighlight lang="php">
$collection = collect(['name' => 'Desk', 'price' => 200]);


// [1, 2]
$collection->toJson();


$equalOrAboveThree->all();
// '{"name":"Desk", "price":200}'
 
// [3, 4, 5, 6]




</syntaxhighlight>
</syntaxhighlight>
===<code>()transform</code>===
يكرّر التابع <code>transform</code> عناصر المجموعة ويستعمل دالة رد نداء مع كل عنصر. يعوّض العناصر في المجموعة بنتائج النداءات:<syntaxhighlight lang="php">
$collection = collect([1, 2, 3, 4, 5]);


==== pipe()‎ ====
$collection->transform(function ($item, $key) {
يمرّر التابع <code>pipe</code> المجموعة لنداء معين ويعيد نتيجة دالة رد النداء:<syntaxhighlight lang="php">
$collection = collect([1, 2, 3]);


$piped = $collection->pipe(function ($collection) {
  return $item * 2;
});


  return $collection->sum();
$collection->all();
});


// 6
// [2, 4, 6, 8, 10]




</syntaxhighlight>
</syntaxhighlight><u>تنبيه</u>: على عكس أغلب توابع المجموعات، يغيّر التابع المجموعة الأصلية. إذا أردت إنشاء مجموعة جديدة فاستعمل التابع <code>map</code> بدلًا منه.
===<code>()union</code>===
يضيف التابع المصفوفة الممرّرة للمجموعة. إذا احتوت المصفوفة مفاتيح موجودة في المجموعة الأصلية، فستُفضَّل قيم المجموعة الأصلية:<syntaxhighlight lang="php">
$collection = collect([1 => ['a'], 2 => ['b']]);


==== ()pluck ====
$union = $collection->union([3 => ['c'], 1 => ['b']]);
يسترجع التابع كل القيم من مفتاح ممرّر:<syntaxhighlight lang="php">
$collection = collect([


  ['product_id' => 'prod-100', 'name' => 'Desk'],
$union->all();
  ['product_id' => 'prod-200', 'name' => 'Chair'],
]);


$plucked = $collection->pluck('name');
// [1 => ['a'], 2 => ['b'], 3 => ['c']]


$plucked->all();


// ['Desk', 'Chair']
</syntaxhighlight>
===<code>()unique</code>===
يعيد التابع قيمة فريدة في المجموعة. تحتفظ مجموعة النتيجة بالمفاتيح الأصلية لذا في هذا المثال سنستعمل التابع <code>values</code> لإعادة تعيين المفاتيح لأعداد متتالية:<syntaxhighlight lang="php">
$collection = collect([1, 1, 2, 2, 3, 4, 2]);


$unique = $collection->unique();


</syntaxhighlight>
$unique->values()->all();
يمكنك أيضا تحديد مفاتيح المجموعة الناتجة:<syntaxhighlight lang="php">
$plucked = $collection->pluck('name', 'product_id');


$plucked->all();
// [1, 2, 3, 4]
 
// ['prod-100' => 'Desk', 'prod-200' => 'Chair']




</syntaxhighlight>
</syntaxhighlight>عند العمل مع المصفوفات المتداخلة أو الكائنات، يمكن تحديد المفتاح المستعمل لتحديد الفرادة:<syntaxhighlight lang="php">
إذا وُجدت مفاتيح متشابهة، فسيضاف العنصر الأخير الموافق للمفتاح:
<syntaxhighlight lang="php">
$collection = collect([
$collection = collect([


   ['brand' => 'Tesla', 'color' => 'red'],
   ['name' => 'iPhone 6', 'brand' => 'Apple', 'type' => 'phone'],
   ['brand' => 'Pagani', 'color' => 'white'],
  ['name' => 'iPhone 5', 'brand' => 'Apple', 'type' => 'phone'],
   ['brand' => 'Tesla', 'color' => 'black'],
   ['name' => 'Apple Watch', 'brand' => 'Apple', 'type' => 'watch'],
   ['brand' => 'Pagani', 'color' => 'orange'],
   ['name' => 'Galaxy S6', 'brand' => 'Samsung', 'type' => 'phone'],
   ['name' => 'Galaxy Gear', 'brand' => 'Samsung', 'type' => 'watch'],
]);
]);


$plucked = $collection->pluck('color', 'brand');
$unique = $collection->unique('brand');


$plucked->all();
$unique->values()->all();


// ['Tesla' => 'black', 'Pagani' => 'orange']
/*


  [
      ['name' => 'iPhone 6', 'brand' => 'Apple', 'type' => 'phone'],
      ['name' => 'Galaxy S6', 'brand' => 'Samsung', 'type' => 'phone'],
  ]
*/


</syntaxhighlight>
</syntaxhighlight>يمكنك أيضا تمرير دالة رد النداء الخاصة بك لتحديد الفرادة:<syntaxhighlight lang="php">
$unique = $collection->unique(function ($item) {


==== ()pop ====
  return $item['brand'].$item['type'];
يحذف التابع pop العنصر الأخير من المجموعة ويعيده:<syntaxhighlight lang="php">
});
$collection = collect([1, 2, 3, 4, 5]);


$collection->pop();
$unique->values()->all();


// 5
/*


$collection->all();
  [
      ['name' => 'iPhone 6', 'brand' => 'Apple', 'type' => 'phone'],
      ['name' => 'Apple Watch', 'brand' => 'Apple', 'type' => 'watch'],
      ['name' => 'Galaxy S6', 'brand' => 'Samsung', 'type' => 'phone'],
      ['name' => 'Galaxy Gear', 'brand' => 'Samsung', 'type' => 'watch'],
  ]
*/


// [1, 2, 3, 4]
</syntaxhighlight>يستعمل التابع مقارنة غير صارمة أي أن السلاسل النصية التي تحتوي رقمًا تعدّ مساويةً لعددٍ له القيمة الرقمية. استعمل التابع <code>uniqueStrict</code> لمقارنةٍ أكثر صرامةً.
===<code>()uniqueStrict</code>===
هذا التابع شبيه بالتابع <code>unique</code> لكنه يستعمل مقارنةً صارمةً.
===<code>()unless</code>===
ينفذ التابع دالة رد النداء الممرَّرة إلا في حالة كان المعامل الأول الممرّر <code>true</code>:<syntaxhighlight lang="php">
$collection = collect([1, 2, 3]);


$collection->unless(true, function ($collection) {


</syntaxhighlight>
  return $collection->push(4);
});


==== ()prepend ====
$collection->unless(false, function ($collection) {
يضيف التابع عناصر في أول المجموعة:<syntaxhighlight lang="php">
$collection = collect([1, 2, 3, 4, 5]);


$collection->prepend(0);
  return $collection->push(5);
});


$collection->all();
$collection->all();


// [0, 1, 2, 3, 4, 5]
// [1, 2, 3, 5]
 


</syntaxhighlight>لعكس وظيفة التابع استعمل التابع <code>when</code>.
===<code>()unwrap</code>===
يعيد التابع عناصر المجموعة من القيم الممرّرة عند إمكانية التطبيق:<syntaxhighlight lang="php">
Collection::unwrap(collect('John Doe'));


</syntaxhighlight>
// ['John Doe']


يمكنك تمرير معامل ثاني لتحديد مفتاح العناصر المضافة:<syntaxhighlight lang="php">
Collection::unwrap(['John Doe']);
$collection = collect(['one' => 1, 'two' => 2]);


$collection->prepend(0, 'zero');
// ['John Doe']


$collection->all();
Collection::unwrap('John Doe');


// ['zero' => 0, 'one' => 1, 'two' => 2]
// 'John Doe'




</syntaxhighlight>
</syntaxhighlight>
===<code>()values</code>===
يعيد التابع مجموعةً جديدةً مع إعادة ضبط المفاتيح لأعداد متتالية:<syntaxhighlight lang="php">
Collection::unwrap(collect('John Doe'));


==== ()pull ====
// ['John Doe']
يحذف التابع <code>pull</code> عنصرًا من المجموعة ويعيده وذلك باستعمال مفتاحه:<syntaxhighlight lang="php">
$collection = collect(['product_id' => 'prod-100', 'name' => 'Desk']);


$collection->pull('name');
Collection::unwrap(['John Doe']);


// 'Desk'
// ['John Doe']


$collection->all();
Collection::unwrap('John Doe');


// ['product_id' => 'prod-100']
// 'John Doe'




</syntaxhighlight>
</syntaxhighlight>
===<code>()when</code>===
ينفذّ التابع النداء الممرّر عندما تكون قيمة المعامل الأول <code>true</code>:<syntaxhighlight lang="php">
$collection = collect([1, 2, 3]);
$collection->when(true, function ($collection) {


==== ()push ====
  return $collection->push(4);
يضيف التابع عنصرًا في آخر المجموعة:<syntaxhighlight lang="php">
});
$collection = collect([1, 2, 3, 4]);
 
$collection->when(false, function ($collection) {


$collection->push(5);
  return $collection->push(5);
});


$collection->all();
$collection->all();


// [1, 2, 3, 4, 5]
// [1, 2, 3, 4]




</syntaxhighlight>
</syntaxhighlight>لعكس وظيفة <code>when</code> استعمل التابع <code>unless</code>.
===<code>()where</code>===
يرشِّح التابع المجموعة عبر الزوج المفتاح/القيمة الممرّر:<syntaxhighlight lang="php">
$collection = collect([


==== ()put ====
  ['product' => 'Desk', 'price' => 200],
يضع التابع <code>put</code> المفتاح والقيمة في المجموعة:<syntaxhighlight lang="php">
  ['product' => 'Chair', 'price' => 100],
$collection = collect(['product_id' => 1, 'name' => 'Desk']);
  ['product' => 'Bookcase', 'price' => 150],
  ['product' => 'Door', 'price' => 100],
]);


$collection->put('price', 100);
$filtered = $collection->where('price', 100);


$collection->all();
$filtered->all();


// ['product_id' => 1, 'name' => 'Desk', 'price' => 100]
/*


  [
      ['product' => 'Chair', 'price' => 100],
      ['product' => 'Door', 'price' => 100],
  ]
*/


</syntaxhighlight>
</syntaxhighlight>يستعمل التابع مقارنة غير صارمة أي أن السلاسل النصية التي تحتوي رقمًا تعدّ مساويةً لعدد بنفس القيمة الرقمية. استعمل التابع <code>whereStrict</code> لمقارنةٍ أكثر صرامةً.
===<code>()whereStrict</code>===
يشبه هذا التابع عمل <code>where</code> لكنه يستعمل مقارنةً صارمةً.
===<code>()whereIn</code>===
يرشِّح التابع المجموعة عبر الزوج المفتاح\القيمة المحتواة في المصفوفة الممرّرة:<syntaxhighlight lang="php">
$collection = collect([


==== ()random ====
  ['product' => 'Desk', 'price' => 200],
يعيد التابع عنصرًا عشوائيًا من المجموعة:<syntaxhighlight lang="php">
  ['product' => 'Chair', 'price' => 100],
$collection = collect([1, 2, 3, 4, 5]);
  ['product' => 'Bookcase', 'price' => 150],
  ['product' => 'Door', 'price' => 100],
]);


$collection->random();
$filtered = $collection->whereIn('price', [150, 200]);


// 4 - (retrieved randomly)
$filtered->all();


/*


</syntaxhighlight>
  [
      ['product' => 'Bookcase', 'price' => 150],
      ['product' => 'Desk', 'price' => 200],
  ]
*/


يمكنك اختيار تمرير عدد للتابع لتحديد عدد العناصر التي تريد إعادتها عشوائيًا. يعيد التابع مجموعة في حال تمرير عدد العناصر المطلوبة:<syntaxhighlight lang="php">
</syntaxhighlight>يستعمل التابع مقارنة غير صارمة أي أن السلاسل النصية التي تحتوي رقمًا تعدّ مساويةً لعددٍ بنفس القيمة الرقمية. استعمل التابع <code>whereInStrict</code> لمقارنةٍ أكثر صرامةً.
$random = $collection->random(3);
===<code>()whereInStrict</code>===
يشبه هذا التابع عمل <code>whereIn</code> لكنه يستعمل مقارنةً صارمة.
===<code>()whereInstanceOf</code>===
يرشِّح التابع المجموعة حسب صنف ممرّر:<syntaxhighlight lang="php">
$collection = collect([


$random->all();
  new User,
  new User,
  new Post,
]);


// [2, 4, 5] - (retrieved randomly)
return $collection->whereInstanceOf(User::class);




</syntaxhighlight>
</syntaxhighlight>
===<code>()whereNotIn</code>===
يرشِّح التابع المجموعة حسب زوج المفتاح/القيمة غير مجموعة في المصفوفة الممرّرة:<syntaxhighlight lang="php">
$collection = collect([


إذا كان عدد العناصر في المجموعة أقل من المطلوب فسيُطلق التابع الاستثناء <code>InvalidArgumentException</code>.
  ['product' => 'Desk', 'price' => 200],
  ['product' => 'Chair', 'price' => 100],
  ['product' => 'Bookcase', 'price' => 150],
  ['product' => 'Door', 'price' => 100],
]);


==== ()reduce ====
$filtered = $collection->whereNotIn('price', [150, 200]);
يقلص التابع المجموعة لعنصر واحد بتمرير نتيجة كل تكرار نداء للتكرار الموالي:<syntaxhighlight lang="php">
$collection = collect([1, 2, 3]);


$total = $collection->reduce(function ($carry, $item) {
$filtered->all();


  return $carry + $item;
/*
});


// 6
  [
      ['product' => 'Chair', 'price' => 100],
      ['product' => 'Door', 'price' => 100],
  ]
*/


</syntaxhighlight>يستعمل التابع مقارنة غير صارمة أي أن السلاسل النصية التي تحتوي رقمًا تعدّ مساويةً لعددٍ بنفس القيمة الرقمية. استعمل التابع <code>whereNotInStrict</code> لمقارنةٍ أكثر صرامة.
===<code>()whereNotInStrict</code>===
يشبه هذا التابع عمل <code>whereNotIn</code> لكنه يستعمل مقارنةً صارمةً.
===<code>()wrap</code>===
يغلِّف التابع الثابت القيمة في مجموعة عند تطبيقه:<syntaxhighlight lang="php">
$collection = Collection::wrap('John Doe');


</syntaxhighlight>
$collection->all();


قيمة <code>carry$</code> في التكرار الأول <code>null</code>، لكن بإمكانك تمرير قيمة الأولية يرجعها التابع بدل <code>null</code> كمعامل ثاني للتابع:<syntaxhighlight lang="php">
// ['John Doe']
$collection->reduce(function ($carry, $item) {


  return $carry + $item;
$collection = Collection::wrap(['John Doe']);
}, 4);


// 10
$collection->all();


// ['John Doe']


</syntaxhighlight>
$collection = Collection::wrap(collect('John Doe'));


==== ()reject ====
$collection->all();
يُستعمل التابع <code>reject</code> لترشيح المجموعة باستعمال دالة رد نداء معينة. يجب أن تعيد دالة رد النداء القيمة <code>true</code> ليُحذف العنصر من المجموعة الناتجة:<syntaxhighlight lang="php">
$collection = collect([1, 2, 3, 4]);


$filtered = $collection->reject(function ($value, $key) {
// ['John Doe']


  return $value > 2;
});


$filtered->all();
</syntaxhighlight>
===<code>()zip</code>===
يدمج التابع <code>zip</code> قيم المصفوفات الممرّرة في المواضع المناسبة:<syntaxhighlight lang="php">
$collection = collect(['Chair', 'Desk']);
 
$zipped = $collection->zip([100, 200]);
 
$zipped->all();


// [1, 2]
// [['Chair', 100], ['Desk', 200]]




</syntaxhighlight>
</syntaxhighlight>
==الرسائل ذات الترتيب العالي==
توفّر المجموعات دعمًا للرسائل ذات الترتيب العالي (higher order messages)، وهي طرق مختصرة لتنفيذ أعمال شائعة على المجموعات. التوابع التي توفر رسائل ذات ترتيب عالي هي: <code>average</code> و <code>avg</code> و <code>contains</code> و <code>each</code> و <code>every</code> و <code>filter</code> و <code>first</code> و <code>flatMap</code> و <code>groupBy</code> و <code>keyBy</code> و <code>map</code> و <code>max</code> و <code>min</code> و <code>partition</code> و <code>reject</code> و <code>sortBy</code> و <code>sortByDesc</code> و <code>sum</code> و <code>unique</code>.


لعكس وظيفة <code>reject</code>، انظر التابع <code>filter</code>.
يمكن الوصول لكل رسالة ذات ترتيب عالي كخاصية ديناميكية لكائن المجموعة. مثلًا، لنستعمل رسائل التابع <code>each</code> لنداء تابع مع كل عنصر في المجموعة:<syntaxhighlight lang="php">
$users = User::where('votes', '>', 500)->get();


==== ()reverse ====
$users->each->markAsVip();
يعكس التابع ترتيب عناصر المجموعة محافظًا على المفاتيح الأصلية:<syntaxhighlight lang="php">
$collection = collect(['a', 'b', 'c', 'd', 'e']);


$reversed = $collection->reverse();


$reversed->all();
</syntaxhighlight>بنفس الطريقة، يمكن استعمال رسائل <code>sum</code> لجمع أصوات (votes) مجموعة مستخدمين:<syntaxhighlight lang="php">
$users = User::where('group', 'Development')->get();


/*
return $users->sum->votes;


  [
      4 => 'e',
      3 => 'd',
      2 => 'c',
      1 => 'b',
      0 => 'a',
  ]
*/


</syntaxhighlight>
</syntaxhighlight>
 
==مصادر==
==== ()search ====
*[https://laravel.com/docs/5.6/collections صفحة Collections في توثيق Laravel الرسمي.]<noinclude>{{DISPLAYTITLE:المجموعات (Collections) في Laravel}}</noinclude>
يبحث التابع عن قيمة معينة ويعيد مفتاحها. إذا لم توجد القيمة المطلوبة فسيعيد التابع القيمة <code>false</code>:
[[تصنيف:Laravel|{{SUBPAGENAME}}]]
<syntaxhighlight lang="php">
[[تصنيف:Laravel Digging deeper|{{SUBPAGENAME}}]]
$collection = collect([2, 4, 6, 8]);
 
$collection->search(4);
 
// 1
 
 
</syntaxhighlight>
 
يقارن هذا التابع مقارنة غير صارمة أي أن سلسلةً نصيةً تحتوي على رقمٍ تعدّ مساويةً للقيمة الرقمية. لاستعمال مقارنة صارمة، مرّر <code>true</code> كمعامل ثاني إلى التابع:<syntaxhighlight lang="php">
$collection->search('4', true);
 
// false
 
 
</syntaxhighlight>
 
بشكلٍ بديل، يمكنك تمرير دالة رد النداء الخاصة بك للبحث عن العنصر الأول الذي يحقق شرط الصحة الذي تحدّده:<syntaxhighlight lang="php">
$collection->search(function ($item, $key) {
 
  return $item > 5;
});
 
// 2
 
 
</syntaxhighlight>
 
==== ()shift ====
يحذف التابع ويعيد العنصر الأول من المجموعة<syntaxhighlight lang="php">
$collection = collect([1, 2, 3, 4, 5]);
 
$collection->shift();
 
// 1
 
$collection->all();
 
// [2, 3, 4, 5]
 
 
</syntaxhighlight>
 
==== ()shuffle ====
يخلط التابع العناصر عشوائيًا:<syntaxhighlight lang="php">
$collection = collect([1, 2, 3, 4, 5]);
 
$shuffled = $collection->shuffle();
 
$shuffled->all();
 
// [3, 2, 5, 1, 4] - (generated randomly)
 
 
</syntaxhighlight>
 
==== ()slice ====
يعيد التابع قطعة من المجموعة بدءًا من مكان محدّد:
<syntaxhighlight lang="php">
$collection = collect([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);
 
$slice = $collection->slice(4);
 
$slice->all();
 
// [5, 6, 7, 8, 9, 10]
 
 
</syntaxhighlight>
 
إذا أردت تحديد حجم القطعة مرّر الحجم كمعامل ثاني للتابع:
<syntaxhighlight lang="php">
$slice = $collection->slice(4, 2);
 
$slice->all();
 
// [5, 6]
 
 
</syntaxhighlight>
 
تحافظ القطعة على المفاتيح الأصلية، إذا لم ترد الحفاظ عليها فاستخدم التابع <code>values</code> لإعادة تسميتها.
 
==== ()sort ====
يُرتِّب التابع <code>sort</code> المجموعة. تحافظ المجموعة الناتجة على المفاتيح الأصلية لذا سنستعمل في المثال التابع <code>values</code> لإعادة تعيين المفاتيح لأعداد متتالية:<syntaxhighlight lang="php">
$collection = collect([5, 3, 1, 2, 4]);
 
$sorted = $collection->sort();
 
$sorted->values()->all();
 
// [1, 2, 3, 4, 5]
 
 
</syntaxhighlight>
 
إذا احتجت ترتيبًا أكثر تعقيدًا، يمكنك تمرير دالة رد نداء للمنطق المتبع في طريقة الترتيب الخاصة بك. راجع توثيق الدالة <code>uasort</code> في PHP وهي طريقة الترتيب الذي يعتمدها التابع <code>sort</code> وراء الكواليس.
 
<u>ملاحظة</u>: إذا احتجت إلى ترتيب مجموعة مصفوفات متداخلة أو كائنات فراجع التابعين <code>sortBy</code> و <code>sortByDesc</code>.
 
==== ()sortBy ====
يرتب التابع المجموعة حسب مفتاح ممرّر. تحافظ المجموعة المرتَّبة على المفاتيح الأصلية لذا في هذا المثال سنستعمل التابع values لإعادة تعيين المفاتيح لأعداد متتالية:<syntaxhighlight lang="php">
$collection = collect([
 
  ['name' => 'Desk', 'price' => 200],
  ['name' => 'Chair', 'price' => 100],
  ['name' => 'Bookcase', 'price' => 150],
]);
 
$sorted = $collection->sortBy('price');
 
$sorted->values()->all();
 
/*
 
  [
      ['name' => 'Chair', 'price' => 100],
      ['name' => 'Bookcase', 'price' => 150],
      ['name' => 'Desk', 'price' => 200],
  ]
*/
 
</syntaxhighlight>
 
يمكنك تمرير دالة رد النداء الخاصة بك لتحديد طريقة الترتيب:<syntaxhighlight lang="php">
$collection = collect([
 
  ['name' => 'Desk', 'colors' => ['Black', 'Mahogany']],
  ['name' => 'Chair', 'colors' => ['Black']],
  ['name' => 'Bookcase', 'colors' => ['Red', 'Beige', 'Brown']],
]);
 
$sorted = $collection->sortBy(function ($product, $key) {
 
  return count($product['colors']);
});
 
$sorted->values()->all();
 
/*
 
  [
      ['name' => 'Chair', 'colors' => ['Black']],
      ['name' => 'Desk', 'colors' => ['Black', 'Mahogany']],
      ['name' => 'Bookcase', 'colors' => ['Red', 'Beige', 'Brown']],
  ]
*/
 
</syntaxhighlight>
 
==== ()sortByDesc ====
هذا التابع شبيه بالتابع <code>sortBy</code> لكنه يرتب العناصر ترتيبًا معاكسًا.
 
==== ()sortKeys ====
يرتب التابع المجموعة حسب مفاتيح المصفوفة المعالجة:<syntaxhighlight lang="php">
$collection = collect([
 
  'id' => 22345,
  'first' => 'John',
  'last' => 'Doe',
]);
 
$sorted = $collection->sortKeys();
 
$sorted->all();
 
/*
 
  [
      'first' => 'John',
      'id' => 22345,
      'last' => 'Doe',
  ]
*/
 
</syntaxhighlight>
 
==== ()sortKeysDesc ====
هذا التابع شبيه بالتابع <code>sortKeys</code> لكنه يرتّب المجموعة ترتيبًا معاكسًا.
 
==== ()splice ====
يحذف التابع <code>splice</code> ويعيد قطعةً من المجموعة بدءًا من موضع محدّد:<syntaxhighlight lang="php">
$collection = collect([1, 2, 3, 4, 5]);
 
$chunk = $collection->splice(2);
 
$chunk->all();
 
// [3, 4, 5]
 
$collection->all();
 
// [1, 2]
 
 
</syntaxhighlight>
 
يمكنك تمرير معامل ثاني لتحديد حجم القطعة:<syntaxhighlight lang="php">
$collection = collect([1, 2, 3, 4, 5]);
 
$chunk = $collection->splice(2, 1);
 
$chunk->all();
 
// [3]
 
$collection->all();
 
// [1, 2, 4, 5]
 
 
</syntaxhighlight>
 
يمكنك أيضًا تمرير معامل ثالث يحتوي عناصر جديدة لتعويض العناصر المحذوفة من المجموعة الأصلية:
<syntaxhighlight lang="php">
$collection = collect([1, 2, 3, 4, 5]);
 
$chunk = $collection->splice(2, 1, [10, 11]);
 
$chunk->all();
 
// [3]
 
$collection->all();
 
// [1, 2, 10, 11, 4, 5]
 
 
</syntaxhighlight>
 
==== ()split ====
يقسم التابع المجموعة لعدد ممرّر من المجموعات:<syntaxhighlight lang="php">
$collection = collect([1, 2, 3, 4, 5]);
 
$groups = $collection->split(3);
 
$groups->toArray();
 
// [[1, 2], [3, 4], [5]]
 
 
</syntaxhighlight>
 
==== ()sum ====
يعيد التابع مجموع عناصر المجموعة:<syntaxhighlight lang="php">
collect([1, 2, 3, 4, 5])->sum();
 
// 15
 
 
</syntaxhighlight>
 
إذا كانت المجموعة تحتوي مصفوفات متداخلة، يجب تمرير مفتاح لتحديد العناصر التي يجب جمعها:<syntaxhighlight lang="php">
$collection = collect([
 
  ['name' => 'JavaScript: The Good Parts', 'pages' => 176],
  ['name' => 'JavaScript: The Definitive Guide', 'pages' => 1096],
]);
 
$collection->sum('pages');
 
// 1272
 
 
</syntaxhighlight>
 
يمكنك أيضًا تمرير دالة رد نداء خاصة بك لتحديد أي القيم ستُجمَع:<syntaxhighlight lang="php">
$collection = collect([
 
  ['name' => 'Chair', 'colors' => ['Black']],
  ['name' => 'Desk', 'colors' => ['Black', 'Mahogany']],
  ['name' => 'Bookcase', 'colors' => ['Red', 'Beige', 'Brown']],
]);
 
$collection->sum(function ($product) {
 
  return count($product['colors']);
});
 
// 6
 
 
</syntaxhighlight>
 
==== ()take ====
يعيد التابع <code>take</code> مجموعةً جديدةً ذاتُ عناصرٍ محددّة:<syntaxhighlight lang="php">
$collection = collect([0, 1, 2, 3, 4, 5]);
 
$chunk = $collection->take(3);
 
$chunk->all();
 
// [0, 1, 2]
 
 
</syntaxhighlight>
 
يمكنك تمرير عدد سالب لأخذ عدد من العناصر من آخر المجموعة:
<syntaxhighlight lang="php">
$collection = collect([0, 1, 2, 3, 4, 5]);
 
$chunk = $collection->take(-2);
 
$chunk->all();
 
// [4, 5]
 
 
</syntaxhighlight>
 
==== ()tap ====
يمرّر التابع <code>tap</code> المجموعة لدالة رد نداء معيّنة. ويسمح لك بالدخول للمجموعة من نقطة محدّدة والقيام بعمل ما على العنصر دون المساس بالمجموعة ككل:<syntaxhighlight lang="php">
collect([2, 4, 3, 1, 5])
 
  ->sort()
  ->tap(function ($collection) {
      Log::debug('Values after sorting', $collection->values()->toArray());
  })
  ->shift();
// 1
 
 
</syntaxhighlight>
 
==== ()times ====
يُنشِئ التابع الساكن <code>times</code> مجموعة جديدة عبر استعمال دالة رد نداء عددًا محددًا من المرات:<syntaxhighlight lang="php">
$collection = Collection::times(10, function ($number) {
 
  return $number * 9;
});
 
$collection->all();
 
// [9, 18, 27, 36, 45, 54, 63, 72, 81, 90]
 
 
</syntaxhighlight>
 
يكون هذا التابع مفيدًا عند استعماله مع المصانع لإنشاء نماذج Eloquent:
<syntaxhighlight lang="php">
$categories = Collection::times(3, function ($number) {
 
  return factory(Category::class)->create(['name' => 'Category #'.$number]);
});
 
$categories->all();
 
/*
 
  [
      ['id' => 1, 'name' => 'Category #1'],
      ['id' => 2, 'name' => 'Category #2'],
      ['id' => 3, 'name' => 'Category #3'],
  ]
*/
 
</syntaxhighlight>
 
==== ()toArray ====
يحوّل التابع المجموعة لمصفوفة PHP. إذا كانت مكوّنات المجموعة نماذج Eloquent، تتحوّل النماذج أيضا لمصفوفات:<syntaxhighlight lang="php">
$collection = collect(['name' => 'Desk', 'price' => 200]);
 
$collection->toArray();
 
/*
 
  [
      ['name' => 'Desk', 'price' => 200],
  ]
*/
 
</syntaxhighlight>
 
<u>تنبيه</u>: يحوّل <code>toArray</code> كل الكائنات المتداخلة في المجموعة لمصفوفات. إذا أردت الحصول على المصفوفة الخام استعمل التابع <code>all</code> بدلًا منه.
 
==== ()toJson ====
يحوّل التابع المجموعة لسلسلة <code>JSON</code>:
<syntaxhighlight lang="php">
$collection = collect(['name' => 'Desk', 'price' => 200]);
 
$collection->toJson();
 
// '{"name":"Desk", "price":200}'
 
 
</syntaxhighlight>
 
==== ()transform ====
يكرّر التابع عناصر المجموعة ويستعمل دالة رد نداء مع كل عنصر. يعوّض العناصر في المجموعة بنتائج النداءات:
$collection = collect([1, 2, 3, 4, 5]);
 
$collection->transform(function ($item, $key) {
    return $item * 2;
});
 
$collection->all();
 
// [2, 4, 6, 8, 10]
تنبيه: على عكس أغلب توابع المجموعات، يغيّر التابع المجموعة الأصلية. إذا أردت إنشاء مجموعة جديدة فاستعمل التابع map بدلًا منه.
()union
يضيف التابع المصفوفة الممرّرة للمجموعة. إذا احتوت المصفوفة مفاتيح موجودة في المجموعة الأصلية، فستُفضَّل قيم المجموعة الأصلية:
$collection = collect([1 => ['a'], 2 => ['b']]);
 
$union = $collection->union([3 => ['c'], 1 => ['b']]);
 
$union->all();
 
// [1 => ['a'], 2 => ['b'], 3 => ['c']]
()unique
يعيد التابع قيمة فريدة في المجموعة. تحتفظ مجموعة النتيجة بالمفاتيح الأصلية لذا في هذا المثال سنستعمل التابع values لإعادة تعيين المفاتيح لأعداد متتالية:
$collection = collect([1, 1, 2, 2, 3, 4, 2]);
 
$unique = $collection->unique();
 
$unique->values()->all();
 
// [1, 2, 3, 4]
عند العمل مع المصفوفات المتداخلة أو الكائنات، يمكن تحديد المفتاح المستعمل لتحديد الفرادة:
$collection = collect([
    ['name' => 'iPhone 6', 'brand' => 'Apple', 'type' => 'phone'],
    ['name' => 'iPhone 5', 'brand' => 'Apple', 'type' => 'phone'],
    ['name' => 'Apple Watch', 'brand' => 'Apple', 'type' => 'watch'],
    ['name' => 'Galaxy S6', 'brand' => 'Samsung', 'type' => 'phone'],
    ['name' => 'Galaxy Gear', 'brand' => 'Samsung', 'type' => 'watch'],
]);
 
$unique = $collection->unique('brand');
 
$unique->values()->all();
 
/*
    [
        ['name' => 'iPhone 6', 'brand' => 'Apple', 'type' => 'phone'],
        ['name' => 'Galaxy S6', 'brand' => 'Samsung', 'type' => 'phone'],
    ]
*/
يمكنك أيضا تمرير دالة رد النداء الخاصة بك لتحديد الفرادة:
$unique = $collection->unique(function ($item) {
    return $item['brand'].$item['type'];
});
 
$unique->values()->all();
 
/*
    [
        ['name' => 'iPhone 6', 'brand' => 'Apple', 'type' => 'phone'],
        ['name' => 'Apple Watch', 'brand' => 'Apple', 'type' => 'watch'],
        ['name' => 'Galaxy S6', 'brand' => 'Samsung', 'type' => 'phone'],
        ['name' => 'Galaxy Gear', 'brand' => 'Samsung', 'type' => 'watch'],
    ]
*/
يستعمل التابع مقارنة غير صارمة أي أن السلاسل النصية التي تحتوي رقمًا تعدّ مساويةً لعددٍ له القيمة الرقمية. استعمل التابع uniqueStrict لمقارنةٍ أكثر صرامةً.
()uniqueStrict
هذا التابع شبيه بالتابع unique لكنه يستعمل مقارنةً صارمةً.
()unless
ينفذ التابع unless دالة رد النداء الممرَّرة إلا في حالة كان المعامل الأول الممرّر true:
$collection = collect([1, 2, 3]);
 
$collection->unless(true, function ($collection) {
    return $collection->push(4);
});
 
$collection->unless(false, function ($collection) {
    return $collection->push(5);
});
 
$collection->all();
 
// [1, 2, 3, 5]
لعكس وظيفة التابع استعمل التابع when.
()unwrap
يعيد التابع unwrap عناصر المجموعة من القيم الممرّرة عند إمكانية التطبيق:
Collection::unwrap(collect('John Doe'));
 
// ['John Doe']
 
Collection::unwrap(['John Doe']);
 
// ['John Doe']
 
Collection::unwrap('John Doe');
 
// 'John Doe'
()values
يعيد التابع مجموعةً جديدةً مع إعادة ضبط المفاتيح لأعداد متتالية:
Collection::unwrap(collect('John Doe'));
 
// ['John Doe']
 
Collection::unwrap(['John Doe']);
 
// ['John Doe']
 
Collection::unwrap('John Doe');
 
// 'John Doe'
()when
ينفذّ التابع النداء الممرّر عندما تكون قيمة المعامل الأول true:
$collection = collect([1, 2, 3]);
 
$collection->when(true, function ($collection) {
    return $collection->push(4);
});
 
$collection->when(false, function ($collection) {
    return $collection->push(5);
});
 
$collection->all();
 
// [1, 2, 3, 4]
لعكس وظيفة when استعمل التابع unless.
()where
يرشِّح التابع المجموعة عبر الزوج المفتاح/القيمة الممرّر:
$collection = collect([
    ['product' => 'Desk', 'price' => 200],
    ['product' => 'Chair', 'price' => 100],
    ['product' => 'Bookcase', 'price' => 150],
    ['product' => 'Door', 'price' => 100],
]);
 
$filtered = $collection->where('price', 100);
 
$filtered->all();
 
/*
    [
        ['product' => 'Chair', 'price' => 100],
        ['product' => 'Door', 'price' => 100],
    ]
*/
يستعمل التابع مقارنة غير صارمة أي أن السلاسل النصية التي تحتوي رقمًا تعدّ مساويةً لعدد بنفس القيمة الرقمية. استعمل التابع whereStrict لمقارنةٍ أكثر صرامةً.
 
()whereStrict
يشبه هذا التابع عمل where لكنه يستعمل مقارنةً صارمةً.
()whereIn
يرشِّح التابع المجموعة عبر الزوج المفتاح\القيمة المحتواة في المصفوفة الممرّرة:
$collection = collect([
    ['product' => 'Desk', 'price' => 200],
    ['product' => 'Chair', 'price' => 100],
    ['product' => 'Bookcase', 'price' => 150],
    ['product' => 'Door', 'price' => 100],
]);
 
$filtered = $collection->whereIn('price', [150, 200]);
 
$filtered->all();
 
/*
    [
        ['product' => 'Bookcase', 'price' => 150],
        ['product' => 'Desk', 'price' => 200],
    ]
*/
يستعمل التابع مقارنة غير صارمة أي أن السلاسل النصية التي تحتوي رقمًا تعدّ مساويةً لعددٍ بنفس القيمة الرقمية. استعمل التابع whereInStrict لمقارنةٍ أكثر صرامةً.
 
()whereInStrict
يشبه هذا التابع عمل whereIn لكنه يستعمل مقارنةً صارمة.
()whereInstanceOf
يرشِّح التابع whereInstanceOf المجموعة حسب صنف ممرّر:
$collection = collect([
    new User,
    new User,
    new Post,
]);
 
return $collection->whereInstanceOf(User::class);
 
()whereNotIn
يرشِّح التابع المجموعة حسب زوج المفتاح/القيمة غير مجموعة في المصفوفة الممرّرة:
$collection = collect([
    ['product' => 'Desk', 'price' => 200],
    ['product' => 'Chair', 'price' => 100],
    ['product' => 'Bookcase', 'price' => 150],
    ['product' => 'Door', 'price' => 100],
]);
 
$filtered = $collection->whereNotIn('price', [150, 200]);
 
$filtered->all();
 
/*
    [
        ['product' => 'Chair', 'price' => 100],
        ['product' => 'Door', 'price' => 100],
    ]
*/
يستعمل التابع مقارنة غير صارمة أي أن السلاسل النصية التي تحتوي رقمًا تعدّ مساويةً لعددٍ بنفس القيمة الرقمية. استعمل التابع whereNotInStrict لمقارنةٍ أكثر صرامة.
()whereNotInStrict
يشبه هذا التابع عمل whereNotIn لكنه يستعمل مقارنةً صارمةً.
()wrap
يغلِّف التابع wrap الثابت القيمة في مجموعة عند تطبيقه:
$collection = Collection::wrap('John Doe');
 
$collection->all();
 
// ['John Doe']
 
$collection = Collection::wrap(['John Doe']);
 
$collection->all();
 
// ['John Doe']
 
$collection = Collection::wrap(collect('John Doe'));
 
$collection->all();
 
// ['John Doe']
 
()zip
يدمج التابع zip قيم المصفوفات الممرّرة في المواضع المناسبة:
$collection = collect(['Chair', 'Desk']);
 
$zipped = $collection->zip([100, 200]);
 
$zipped->all();
 
// [['Chair', 100], ['Desk', 200]]
 
الرسائل ذات الترتيب العالي
توفّر المجموعات دعمًا للرسائل ذات الترتيب العالي (higher order messages)، وهي طرق مختصرة لتنفيذ أعمال شائعة على المجموعات. التوابع التي توفر رسائل ذات ترتيب عالي هي: average و avg و contains و each و every و filter و first و flatMap و groupBy و keyBy و map و max و min و partition و reject و sortBy و sortByDesc و sum و unique.
يمكن الوصول لكل رسالة ذات ترتيب عالي كخاصية ديناميكية لكائن المجموعة. مثلًا، لنستعمل رسائل التابع each لنداء تابع مع كل عنصر في المجموعة:
$users = User::where('votes', '>', 500)->get();
 
$users->each->markAsVip();
بنفس الطريقة، يمكن استعمال رسائل sum لجمع أصوات (votes) مجموعة مستخدمين:
$users = User::where('group', 'Development')->get();
 
return $users->sum->votes;

المراجعة الحالية بتاريخ 14:05، 24 أكتوبر 2018

 مقدمة

يوفر الصنف Illuminate\Support\Collection غلافًا ملائمًا و مساعدًا على العمل مع مصفوفات البيانات. مثلًا، تفقد الشيفرة الموالية إذ سنستعمل المساعد collect لإنشاء نسخة Collection جديدة من المصفوفة، ننفذ الدالة strtoupper مع كل عنصر، ثم نحذف كل العناصر الفارغة:

$collection = collect(['taylor', 'abigail', null])->map(function ($name) {
   return strtoupper($name);

}) ->reject(function ($name) {
   return empty($name);

});

كما ترى، تسمح الدالة بسلسلة توابعها لتنفيذِ تخطيطِ دقيق و التحكم في حجم المصفوفة قيد العمل. بشكل عام، المجموعات غير قابلة للتغيير، أي أن كل تابع collect يعيد نسخة من كائن مجموعة جديد تمامًا.

إنشاء المجموعات

كما ذُكر سابقًا، يعيد التابع المساعد collect نسخة من كائن Illuminate\Support\Collection جديد لكل مصفوفة. لذا، يمكننا إنشاء مجموعة بسهولة

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

ملاحظة: نتائج طلبات Eloquent تكون دائمًا على شكل كائن Collection.

تمديد المجموعات

المجموعات قابلة للتمديد، مما يسمح لك بإضافة توابع أخرى للصنف Collection في وقت التشغيل. مثلًا، الشيفرة التالية تضيف التابع toUpper إلى الصنف Collection:

use Illuminate\Support\Str;

Collection::macro('toUpper', function () {

   return $this->map(function ($value) {
       return Str::upper($value);
   });
});

$collection = collect(['first', 'second']);
$upper = $collection->toUpper();

// ['FIRST', 'SECOND']

في العادة، عليك ذكر الإضافات للصنف Collection في مزود الخدمات.

التوابع المتاحة

في بقية هذا التوثيق، سنناقش كل تابع متوافر في الصنف Collection. تذكر أنّ كل التوابع يمكن سلسلتها معًا لمعالجة المصفوفة بيسر. بالإضافة ألى ذلك، تقريبًا كل التوابع تعيد نسخة جديدة من الكائن Collection مما يحافظ على المجموعة الأصلية عند الحاجة:

()all

يعيد التابع المصفوفة المقصودة على شكل مجموعة:

collect([1, 2, 3])->all();
// [1, 2, 3]

()average

اسم بديل للتابع avg.

()avg

يعيد التابع قيمة المتوسط الحسابي للمفتاح الممرّر:

$average = collect([['foo' => 10], ['foo' => 10], ['foo' => 20], ['foo' => 40]])->avg('foo');
// 20

$average = collect([1, 1, 2, 4])->avg();
// 2

()chunk

يقسم التابع المجموعة لعدة مجموعات أصغر بحجم معين:

$collection = collect([1, 2, 3, 4, 5, 6, 7]);
$chunks = $collection->chunk(4);
$chunks->toArray();

// [[1, 2, 3, 4], [5, 6, 7]]

هذا التابع مفيد خاصة في الواجهات عند العمل مع نظام شبكي "grid" مثل Bootstrap. تخيل أنك تريد عرض مجموعة من نماذج Eloquent في شبكة:

@foreach ($products->chunk(3) as $chunk)

       @foreach ($chunk as $product)
{{$product->name }}
       @endforeach
@endforeach

()collapse

يُسقط التابع مجموعة من المصفوفات في مجموعة واحدة ذات بعد واحد:

$collection = collect([[1, 2, 3], [4, 5, 6], [7, 8, 9]]);
$collapsed = $collection->collapse();
$collapsed->all();

// [1, 2, 3, 4, 5, 6, 7, 8, 9]

()combine

يدمج التابع مفاتيح المجموعة مع قيم من مجموعة أو مصفوفة أخرى:

$collection = collect(['name', 'age']);
$combined = $collection->combine(['George', 29]);
$combined->all();

// ['name' => 'George', 'age' => 29]

()concat

يضيف التابع المصفوفة الممررة أو قيم المجموعة المُمَرَّرة لآخر المجموعة:

$collection = collect(['John Doe']);
$concatenated = $collection->concat(['Jane Doe'])->concat(['name' => 'Johnny Doe']);
$concatenated->all();

// ['John Doe', 'Jane Doe', 'Johnny Doe']

()contains

يحدد التابع إذا كانت المجموعة تحتوي على عنصرٍ محدِّد أم لا:

$collection = collect(['name' => 'Desk', 'price' => 100]);
$collection->contains('Desk');

// true

$collection->contains('New York');

// false

يمكنك أيضًا تمرير زوجٍ من المفتاح/القيمة إلى التابع الذي سيحدد إذا كان الثنائي موجودًا أم لا:

$collection = collect([

   ['product' => 'Desk', 'price' => 200],
   ['product' => 'Chair', 'price' => 100],
]);

$collection->contains('product', 'Bookcase');

// false

أخيرًا، يمكنك تمرير دالة رد نداء إلى التابع contains لتقوم بعملية التحقق من وجود القيمة بنفسك:

$collection = collect([1, 2, 3, 4, 5]);
$collection->contains(function ($value, $key) {

   return $value > 5;
});

// false

يقوم التابع بمقارنة بسيطة، أي أن سلسلة المحارف التي تحتوي على رقم تُعدّ مساويةً لعدد صحيحٍ بنفس القيمة الرقمية. استعمل التابع containsStrict لمقارنة أكثر صرامةً.

()containsStrict

نفس الوظيفة التابع لكنها تستعمل مقارنةً صارمةً (strict).

()count

يعيد التابع عدد عناصر المجموعة:

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

// 4

()crossJoin

يقوم التابع بوصل تقاطعي بين قيم المجموعة والمصفوفة الممرّرة، ويعيد جداءً ديكارتيًا بكل المبادلات الممكنة:

$collection = collect([1, 2]);
$matrix = $collection->crossJoin(['a', 'b']);
$matrix->all();

/*
    [
        [1, 'a'],
        [1, 'b'],
        [2, 'a'],
        [2, 'b'],
    ]
*/

$collection = collect([1, 2]);
$matrix = $collection->crossJoin(['a', 'b'], ['I', 'II']);
$matrix->all();

/*
    [
        [1, 'a', 'I'],
        [1, 'a', 'II'],
        [1, 'b', 'I'],
        [1, 'b', 'II'],
        [2, 'a', 'I'],
        [2, 'a', 'II'],
        [2, 'b', 'I'],
        [2, 'b', 'II'],
    ]
*/

()dd

يطبع التابع عناصر المجموعة وينهي تنفيذ السكربت:

$collection = collect(['John Doe', 'Jane Doe']);
$collection->dd();

/*
    Collection {
        #items: array:2 [
            0 => "John Doe"
            1 => "Jane Doe"
        ]
    }
*/

إذا لم ترد إنهاء السكربت، فاستعمل التابع dump بدلًا من dd.

()diff

يقارن التابع المجموعة بمجموعة أخرى أو بمصفوفة PHP عادية اعتمادًا على قيمها. يعيد هذا التابع قيم المجموعة الأصلية غير الموجودة في المجموعة الممرّرة:

$collection = collect([1, 2, 3, 4, 5]);
$diff = $collection->diff([2, 4, 6, 8]);
$diff->all();

// [1, 3, 5]

()diffAssoc

يقارن التابع المجموعة بمجموعة أخرى أو بمصفوفة PHP بالاعتماد على المفاتيح والقيم. يعيد هذا التابع أزواج المفتاح/القيمة من المجموعة الأصلية غير الموجودة في المجموعة الممررة:

$collection = collect([

   'color' => 'orange',
   'type' => 'fruit',
   'remain' => 6
]);

$diff = $collection->diffAssoc([

   'color' => 'yellow',
   'type' => 'fruit',
   'remain' => 3,
   'used' => 6
]);

$diff->all();

// ['color' => 'orange', 'remain' => 6]

()diffKeys

يقارن هذا التابع المجموعة بمجموعة أخرى أو بمصفوفة PHP بالإرتكاز على المفاتيح، يعيد هذا التابع أزواج المفتاح/القيمة من المجموعة الأصلية غير الموجودة في المجموعة الممرّرة:

$collection = collect([

   'one' => 10,
   'two' => 20,
   'three' => 30,
   'four' => 40,
   'five' => 50,
]);

$diff = $collection->diffKeys([

   'two' => 2,
   'four' => 4,
   'six' => 6,
   'eight' => 8,
]);

$diff->all();

// ['one' => 10, 'three' => 30, 'five' => 50]

()dump

يطبع التابع عناصر المجموعة:

$collection = collect(['John Doe', 'Jane Doe']);

$collection->dump();

/*

   Collection {
       #items: array:2 [
           0 => "John Doe"
           1 => "Jane Doe"
       ]
   }
*/

إذا أردت إيقاف تنفيذ السكربت بعد تفريغ المجموعة فاستعمل التابع dd.

()each

يكرّر التابع عناصر المجموعة واحدًا بواحد ويمرّرها لدالة رد نداء:

$collection->each(function ($item, $key) {

  //
});

إذا أردت إيقاف التكرار، أعد القيمة false من دالة رد النداء:

$collection->each(function ($item, $key) {

   if (/* شرط إيقاف */) {
       return false;
   }
});

()eachSpread

يكرّّر التابع عناصر المجموعة ويمرّر كل عنصر متداخل لدالة رد النداء:

$collection = collect([['John Doe', 35], ['Jane Doe', 33]]);
$collection->eachSpread(function ($name, $age) {

  //
});

يمكنك إيقاف التكرار بإعادة القيمة false من دالة رد النداء.

$collection->eachSpread(function ($name, $age) {

   return false;
});

()every

يمكن استعمال التابع للتأكد من أن كل عناصر المجموعة تحقق شرطًا معينًا:

collect([1, 2, 3, 4])->every(function ($value, $key) {

   return $value > 2;
});

// false

()except

يعيد التابع كل عناصر المجموعة باستثناء العناصر بالمفاتيح المحدَّدة:

$collection = collect(['product_id' => 1, 'price' => 100, 'discount' => false]);
$filtered = $collection->except(['price', 'discount']);
$filtered->all();

// ['product_id' => 1]

لعكس وظيفة except، انظر التابع only.

()filter

يرشِّح التابع عناصر المجموعة ويُبقي فقط العناصر التي تحقق شرطًا معينًا:

$collection = collect([1, 2, 3, 4]);
$filtered = $collection->filter(function ($value, $key) {

   return $value > 2;
});

$filtered->all();

// [3, 4]

إذا لم توفّر نداء للتابع، يحذف filter كل العناصر المساوية للقيمة false:

$collection = collect([1, 2, 3, null, false, , 0, []]);
$collection->filter()->all();

// [1, 2, 3]

لعكس وظيفة filter انظر التابع reject.

()first

يرجع التابع العنصر الأول من المجموعة الذي يحقق شرطًا معينًا:

collect([1, 2, 3, 4])->first(function ($value, $key) {

   return $value > 2;
}); // 3

يمكنك أيضًا استدعاء التابع first دون معامل، وسيعيد العنصر الأول من المجموعة، وإذا كانت المجموعة فارغةً، فستعاد القيمة null:

collect([1, 2, 3, 4])->first();

// 1

()firstWhere

يعيد التابع العنصر الأول من المجموعة الموافق لزوج المفتاح/القيمة الممرّر:

$collection = collect([

   ['name' => 'Regena', 'age' => 12],
   ['name' => 'Linda', 'age' => 14],
   ['name' => 'Diego', 'age' => 23],
   ['name' => 'Linda', 'age' => 84],
]);

$collection->firstWhere('name', 'Linda');

// ['name' => 'Linda', 'age' => 14]

يمكن أيضًا استعمال التابع مع عامل مقارنة:

$collection->firstWhere('age', '>=', 18);

// ['name' => 'Diego', 'age' => 23]

()flatMap

ينفذ التابع حلقة تكرار في المجموعة، فيمرر قيمة كل تكرار لنداء معين. يمكن للنداء تغيير العنصر وإرجاعه وبالتالي يكوّن مجموعةً جديدة من العناصر المغيَّرة. ثم تُسطَّح المجموعة حسب مستواها:

$collection = collect([

   ['name' => 'Sally'],
   ['school' => 'Arkansas'],
   ['age' => 28]
]);

$flattened = $collection->flatMap(function ($values) {

   return array_map('strtoupper', $values);
});

$flattened->all();

// ['name' => 'SALLY', 'school' => 'ARKANSAS', 'age' => '28'];

()flatten

يُسطِّح التابع مجموعة متعددة الأبعاد لمجموعة ذات بعد واحد:

$collection = collect(['name' => 'taylor', 'languages' => ['php', 'javascript']]);
$flattened = $collection->flatten();
$flattened->all();

// ['taylor', 'php', 'javascript'];

يمكنك أيضًا تمرير معامل لضبط عمق التسطيح:

$collection = collect([

   'Apple' => [
       ['name' => 'iPhone 6S', 'brand' => 'Apple'],
   ],
   'Samsung' => [
       ['name' => 'Galaxy S7', 'brand' => 'Samsung']
   ],
]);

$products = $collection->flatten(1);
$products->values()->all();

/*

   [
       ['name' => 'iPhone 6S', 'brand' => 'Apple'],
       ['name' => 'Galaxy S7', 'brand' => 'Samsung'],
   ]

في هذا المثال، سيتسبب عدم توفير عمق في تسطيح المصفوفات الداخلية لتصبح النتيجة ['iPhone 6S', 'Apple', 'Galaxy S7', 'Samsung']. مما يوفّر مستوى عمق يسمح بتحديد مستوى التداخل الذي سيتم تسطيحه.

()flip

يُبدِّل التابع المفتاح بقيمته:

$collection = collect(['name' => 'taylor', 'framework' => 'laravel']);
$flipped = $collection->flip();
$flipped->all();

// ['taylor' => 'name', 'laravel' => 'framework']

()forget

يحذف التابع عنصرًا من المجموعة باستخدام مفتاحه:

$collection = collect(['name' => 'taylor', 'framework' => 'laravel']);
$collection->forget('name');
$collection->all();

// ['framework' => 'laravel']

تنبيه: على عكس جل توابع المجموعات، لا يعيد forget مجموعةً جديدةً بل يغيّر في المجموعة التي استدعي هذا التابع عليها.

()forPage

يعيد التابع مجموعة تحتوي العناصر الموجودة في رقم الصفحة الممرّر. يقبل التابع رقم صفحة كمعامل أول وعدد العناصر التي يجب إظهارها في الصفحة كمعامل ثاني:

$collection = collect([1, 2, 3, 4, 5, 6, 7, 8, 9]);
$chunk = $collection->forPage(2, 3);
$chunk->all();

// [4, 5, 6]

()get

يعيد التابع قيمة العنصر ذي المفتاح المُمرَّر إلى التابع. إذا كان المفتاح غير موجود فستعاد القيمة null:

$collection = collect(['name' => 'taylor', 'framework' => 'laravel']);
$value = $collection->get('name');

// taylor

يمكنك تمرير قيمة أولية اختيارية كمعامل ثاني:

$collection = collect(['name' => 'taylor', 'framework' => 'laravel']);
$value = $collection->get('foo', 'default-value');

// default-value

يمكنك حتى تمرير دالة رد نداء. تُعاد القيمة المُعادة من دالة رد النداء في حال عدم وجود المفتاح:

$collection->get('email', function () {

   return 'default-value';
});

// default-value

()groupBy

يُجمِّع التابع العناصر حسب قيمة المفتاح الممرّر إلى التابع:

$collection = collect([

   ['account_id' => 'account-x10', 'product' => 'Chair'],
   ['account_id' => 'account-x10', 'product' => 'Bookcase'],
   ['account_id' => 'account-x11', 'product' => 'Desk'],
]);

$grouped = $collection->groupBy('account_id');
$grouped->toArray();

/*
   [
       'account-x10' => [
           ['account_id' => 'account-x10', 'product' => 'Chair'],
           ['account_id' => 'account-x10', 'product' => 'Bookcase'],
       ],
       'account-x11' => [
           ['account_id' => 'account-x11', 'product' => 'Desk'],
      ],
   ]
*/

بدل تمرير سلسلة محارف key، يمكنك تمرير دالة رد نداء التي يجب أن تعيد القيمة التي تريد أن تكون مفتاح التجميع:

$grouped = $collection->groupBy(function ($item, $key) {

   return substr($item['account_id'], -3);
});

$grouped->toArray();

/*

   [
       'x10' => [
           ['account_id' => 'account-x10', 'product' => 'Chair'],
           ['account_id' => 'account-x10', 'product' => 'Bookcase'],
       ],
       'x11' => [
           ['account_id' => 'account-x11', 'product' => 'Desk'],
       ],
   ]
*/

يمكن تمرير عدة معايير تجميع كمصفوفة، يُطبّق كل عنصر من المصفوفة على مستوى العمق الملائم في مصفوفة متعددة الأبعاد:

$data = new Collection([

   10 => ['user' => 1, 'skill' => 1, 'roles' => ['Role_1', 'Role_3']],
   20 => ['user' => 2, 'skill' => 1, 'roles' => ['Role_1', 'Role_2']],
   30 => ['user' => 3, 'skill' => 2, 'roles' => ['Role_1']],
   40 => ['user' => 4, 'skill' => 2, 'roles' => ['Role_2']],
]);

$result = $data->groupBy([

   'skill',
   function ($item) {
       return $item['roles'];
   },
], $preserveKeys = true);

/* [

   1 => [
       'Role_1' => [
           10 => ['user' => 1, 'skill' => 1, 'roles' => ['Role_1', 'Role_3']],
           20 => ['user' => 2, 'skill' => 1, 'roles' => ['Role_1', 'Role_2']],
       ],
       'Role_2' => [
           20 => ['user' => 2, 'skill' => 1, 'roles' => ['Role_1', 'Role_2']],
       ],
       'Role_3' => [
           10 => ['user' => 1, 'skill' => 1, 'roles' => ['Role_1', 'Role_3']],
       ],
   ],
   2 => [
       'Role_1' => [
           30 => ['user' => 3, 'skill' => 2, 'roles' => ['Role_1']],
       ],
       'Role_2' => [
           40 => ['user' => 4, 'skill' => 2, 'roles' => ['Role_2']],
       ],
   ],
];

*/

()has

يحدد التابع إذا كان المفتاح موجودًا في المجموعة أم لا:

$collection = collect(['account_id' => 1, 'product' => 'Desk']);
$collection->has('product');

// true

()implode

يضم التابع عناصر المجموعة في سلسلة حرفية. تعتمد التوابع على نوع العناصر في المجموعة. إذا كانت المجموعة تحتوي مصفوفات أو كائنات، يجب تمرير مفتاح الخاصيات التي تريد ضمّها وعلامة الربط "glue" الذي تريد استعماله بين القيم:

$collection = collect([

   ['account_id' => 1, 'product' => 'Desk'],
   ['account_id' => 2, 'product' => 'Chair'],
]);

$collection->implode('product', ', ');

// Desk, Chair

إذا كانت المجموعة تحتوي سلاسل نصية أو قيمًا رقميةً بسيطةً، فمرّر علامة الربط فقط كمعامل إلى التابع:

collect([1, 2, 3, 4, 5])->implode('-');

// '1-2-3-4-5'

()intersect

يحذف التابع أي قيمة في المجموعة الأصلية غير موجودة في المجموعة أو المصفوفة الممرّرة. تحافظ المجموعة النهائية على مفاتيح المجموعة الأصلية:

$collection = collect(['Desk', 'Sofa', 'Chair']);
$intersect = $collection->intersect(['Desk', 'Chair', 'Bookcase']);
$intersect->all();

// [0 => 'Desk', 2 => 'Chair']

()intersectByKeys

يحذف التابع أي مفتاح من المجموعة الأصلية غير موجود في المجموعة أو المصفوفة الممرّرة:

$collection = collect([

   'serial' => 'UX301', 'type' => 'screen', 'year' => 2009
]);

$intersect = $collection->intersectByKeys([

   'reference' => 'UX404', 'type' => 'tab', 'year' => 2011
]);

$intersect->all();

// ['type' => 'screen', 'year' => 2009]

()isEmpty

يعيد التابع القيمة true إذا كانت المجموعة فارغة وإلا فسيعيد false:

collect([])->isEmpty();

// true

()isNotEmpty

يعيد التابع القيمة true إذا لم تكن المجموعة فارغة، وإلا فسيعيد false:

collect([])->isNotEmpty();

// false

()keyBy

يضيف التابع مفاتيح للمجموعة، إذا وُجد أكثر من عنصر بنفس المفتاح، فسيضاف الأخير فقط إلى المجموعة الجديدة:

$collection = collect([

   ['product_id' => 'prod-100', 'name' => 'Desk'],
   ['product_id' => 'prod-200', 'name' => 'Chair'],
]);

$keyed = $collection->keyBy('product_id');

$keyed->all();

/*

   [
       'prod-100' => ['product_id' => 'prod-100', 'name' => 'Desk'],
       'prod-200' => ['product_id' => 'prod-200', 'name' => 'Chair'],
   ]
*/

يمكنك تمرير نداء للتابع. يجب أن يعيد النداء القيمة التي ستستعمل كمفتاح للمجموعة:

$keyed = $collection->keyBy(function ($item) {

   return strtoupper($item['product_id']);
});

$keyed->all();

/*

   [
       'PROD-100' => ['product_id' => 'prod-100', 'name' => 'Desk'],
       'PROD-200' => ['product_id' => 'prod-200', 'name' => 'Chair'],
   ]
*/

()keys

يعيد التابع مجموعة متكونة من كل المفاتيح:

$collection = collect([

   'prod-100' => ['product_id' => 'prod-100', 'name' => 'Desk'],
   'prod-200' => ['product_id' => 'prod-200', 'name' => 'Chair'],
]);

$keys = $collection->keys();

$keys->all();

// ['prod-100', 'prod-200']

()last

يعيد التابع العنصر الأخير الذي يحقق شرطًا معينًا. إذا كانت المجموعة فارغةً، فسيعيد التابع القيمة null

: collect([1, 2, 3, 4])->last();

// 4

()macro

يسمح التابع بإضافة توابع للصنف Collection في وقت التشغيل. راجع التوثيق حول تمديد المجموعات لمزيد من المعلومات.

()make

يُنشِئ التابع نسخة مجموعة جديدة. راجع قسم إنشاء المجموعات.

()map

يكرّر التابع عناصر المجموعة و يمرّر كل قيمة لدالة رد نداء معيّنة. يمكن لدالة رد اللنداء تغيير العنصر وإعادته، وبالتالي تكوين مجموعة جديدة من العناصر المغيّرة:

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

$multiplied = $collection->map(function ($item, $key) {

   return $item * 2;
});

$multiplied->all();

// [2, 4, 6, 8, 10

تنبيه: كأغلب توابع المجموعات، يعيد map مجموعة جديدة ولا يغير المجموعة الأصلية. إذا أردت تغيير المجموعة الأصلية فاستعمل التابع transform.

()mapInfo

يكرّر التابع المجموعة وينشِئ نسخةً جديدةً من صنف معين عبر تمرير القيمة للتابع الباني للصنف:

class Currency {

   /**
    * صناعة مثيل جديد.
    *
    * @param  string  $code
    * @return void
    */
   function __construct(string $code)
   {
       $this->code = $code;
   }
}

$collection = collect(['USD', 'EUR', 'GBP']);

$currencies = $collection->mapInto(Currency::class);

$currencies->all();

// [Currency('USD'), Currency('EUR'), Currency('GBP')]

()mapSpread

يكرّر التابع عناصر المجموعة ويمرّر كل عنصر متداخل لدالة رد نداء. يمكن لدالة رد النداء تغيير العنصر وإعادته، وبالتالي تكوين مجموعة جديدة من العناصر المغيرة:

$collection = collect([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]);

$chunks = $collection->chunk(2);

$sequence = $chunks->mapSpread(function ($odd, $even) {

   return $odd + $even;
});

$sequence->all();

// [1, 5, 9, 13, 17]

()mapToGroups

يُجمّع التابع عناصر المجموعة باستخدام دالة رد النداء المعيّنة. تعيد دالة رد النداء مصفوفة تجميعية تحتوي زوج المفتاح/القيمة واحد، وبالتالي تكوين مجموعة من القيم المجمَّعة:

$collection = collect([

   [
       'name' => 'John Doe',
       'department' => 'Sales',
   ],
   [
       'name' => 'Jane Doe',
       'department' => 'Sales',
   ],
   [
       'name' => 'Johnny Doe',
       'department' => 'Marketing',
   ]
]);

$grouped = $collection->mapToGroups(function ($item, $key) {

   return [$item['department'] => $item['name']];
});

$grouped->toArray();

/*

   [
       'Sales' => ['John Doe', 'Jane Doe'],
       'Marketing' => ['Johhny Doe'],
   ]
*/
$grouped->get('Sales')->all();

// ['John Doe', 'Jane Doe']

()mapWithKeys

يكرّر التابع المجموعة ويمرّر القيم لدالة رد نداء معيّنة. يعيد التابع مصفوفة تجميعية تحتوي زوج المفتاح/القيمة واحد:

$collection = collect([

   [
       'name' => 'John',
       'department' => 'Sales',
       'email' => 'john@example.com'
   ],
   [
       'name' => 'Jane',
       'department' => 'Marketing',
       'email' => 'jane@example.com'
   ]
]);

$keyed = $collection->mapWithKeys(function ($item) {

   return [$item['email'] => $item['name']];
});

$keyed->all();

/*

   [
       'john@example.com' => 'John',
       'jane@example.com' => 'Jane',
   ]
*/

()max

يعيد التابع القيمة القصوى في لمفتاح معين:

$max = collect([['foo' => 10], ['foo' => 20]])->max('foo');

// 20 $max = collect([1, 2, 3, 4, 5])->max(); 
// 5

()median

يعيد التابع القيمة الوسطية للمفتاح المعين:

$median = collect([['foo' => 10], ['foo' => 10], ['foo' => 20], ['foo' => 40]])->median('foo');

// 15

$median = collect([1, 1, 2, 4])->median();

// 1.5

()merge

يدمج التابع المصفوفة أو المجموعة الممرّرة مع المجموعة الأصلية، تلغي القيم الممرّرة القيم الأصلية:

$collection = collect(['product_id' => 1, 'price' => 100]);
$merged = $collection->merge(['price' => 200, 'discount' => false]);
$merged->all();

// ['product_id' => 1, 'price' => 200, 'discount' => false]

إذا كانت المفاتيح الممرّرة رقمية، تضاف القيم في آخر المجموعة:

$collection = collect(['Desk', 'Chair']);
$merged = $collection->merge(['Bookcase', 'Door']);
$merged->all();

// ['Desk', 'Chair', 'Bookcase', 'Door']

()min

يعيد التابع القيمة الأصغر لمفتاح معين:

$min = collect([['foo' => 10], ['foo' => 20]])->min('foo');

// 10

$min = collect([1, 2, 3, 4, 5])->min();

// 1

()mode

يعيد التابع قيمة المنوال لمفتاح معين:

$mode = collect([['foo' => 10], ['foo' => 10], ['foo' => 20], ['foo' => 40]])->mode('foo');

// [10]

$mode = collect([1, 1, 2, 4])->mode();

// [1]

()nth

ينشِئ التابع مجموعةً جديدةً متكونةً من كل عنصر بعد n عناصر

$collection = collect(['a', 'b', 'c', 'd', 'e', 'f']);

$collection->nth(4);

// ['a', 'e']

يمكنك تمرير موضع البداية كمعامل ثاني:

$collection->nth(4, 1);

// ['b', 'f']

()only

يعيد التابع العناصر في المجموعة ذات المفاتيح الممرّرة:

$collection->nth(4, 1);

// ['b', 'f']

لعكس وظيفة only، استعمل التابع expect.

()pad

يملأ التابع المصفوفة بالقيمة الممرّرة حتى تصل للحجم المحدد. يشبه هذا التابع دالة array_pad في PHP.

$collection = collect(['A', 'B', 'C']);
$filtered = $collection->pad(5, 0);
$filtered->all();

// ['A', 'B', 'C', 0, 0]

$filtered = $collection->pad(-5, 0);
$filtered->all();

// [0, 0, 'A', 'B', 'C']

()partition

يمكن استعمال التابع مع الدالة list في PHP لتفريق العناصر التي تجتاز شرط صحة عن البقية:

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

list($underThree, $equalOrAboveThree) = $collection->partition(function ($i) {

   return $i < 3;
});

$underThree->all();

// [1, 2]

$equalOrAboveThree->all();

// [3, 4, 5, 6]

pipe()‎

يمرّر التابع المجموعة لنداء معين ويعيد نتيجة دالة رد النداء:

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

$piped = $collection->pipe(function ($collection) {

   return $collection->sum();
});

// 6

()pluck

يسترجع التابع كل القيم من مفتاح ممرّر:

$collection = collect([

   ['product_id' => 'prod-100', 'name' => 'Desk'],
   ['product_id' => 'prod-200', 'name' => 'Chair'],
]);

$plucked = $collection->pluck('name');

$plucked->all();

// ['Desk', 'Chair']

يمكنك أيضا تحديد مفاتيح المجموعة الناتجة:

$plucked = $collection->pluck('name', 'product_id');

$plucked->all();

// ['prod-100' => 'Desk', 'prod-200' => 'Chair']

إذا وُجدت مفاتيح متشابهة، فسيضاف العنصر الأخير الموافق للمفتاح:

$collection = collect([

   ['brand' => 'Tesla',  'color' => 'red'],
   ['brand' => 'Pagani', 'color' => 'white'],
   ['brand' => 'Tesla',  'color' => 'black'],
   ['brand' => 'Pagani', 'color' => 'orange'],
]);

$plucked = $collection->pluck('color', 'brand');

$plucked->all();

// ['Tesla' => 'black', 'Pagani' => 'orange']

()pop

يحذف التابع العنصر الأخير من المجموعة ويعيده:

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

$collection->pop();

// 5

$collection->all();

// [1, 2, 3, 4]

()prepend

يضيف التابع عناصر في أول المجموعة:

$collection = collect([1, 2, 3, 4, 5]);
$collection->prepend(0);
$collection->all();

// [0, 1, 2, 3, 4, 5]

يمكنك تمرير معامل ثاني لتحديد مفتاح العناصر المضافة:

$collection = collect(['one' => 1, 'two' => 2]);

$collection->prepend(0, 'zero');

$collection->all();

// ['zero' => 0, 'one' => 1, 'two' => 2]

()pull

يحذف التابع عنصرًا من المجموعة ويعيده وذلك باستعمال مفتاحه:

$collection = collect(['product_id' => 'prod-100', 'name' => 'Desk']);

$collection->pull('name');

// 'Desk'

$collection->all();

// ['product_id' => 'prod-100']

()push

يضيف التابع عنصرًا في آخر المجموعة:

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

$collection->push(5);

$collection->all();

// [1, 2, 3, 4, 5]

()put

يضع التابع المفتاح والقيمة في المجموعة:

$collection = collect(['product_id' => 1, 'name' => 'Desk']);
$collection->put('price', 100);
$collection->all();

// ['product_id' => 1, 'name' => 'Desk', 'price' => 100]

()random

يعيد التابع عنصرًا عشوائيًا من المجموعة:

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

// 4 - (retrieved randomly)

يمكنك اختيار تمرير عدد للتابع لتحديد عدد العناصر التي تريد إعادتها عشوائيًا. يعيد التابع مجموعة في حال تمرير عدد العناصر المطلوبة:

$random = $collection->random(3);

$random->all();

// [2, 4, 5] - (retrieved randomly)

إذا كان عدد العناصر في المجموعة أقل من المطلوب فسيُطلق التابع الاستثناء InvalidArgumentException.

()reduce

يقلص التابع المجموعة لعنصر واحد بتمرير نتيجة كل تكرار نداء للتكرار الموالي:

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

$total = $collection->reduce(function ($carry, $item) {
   return $carry + $item;
});

// 6

قيمة carry$ في التكرار الأول null، لكن بإمكانك تمرير قيمة الأولية يرجعها التابع بدل null كمعامل ثاني للتابع:

$collection->reduce(function ($carry, $item) {

   return $carry + $item;
}, 4);

// 10

()reject

يُستعمل التابع لترشيح المجموعة باستعمال دالة رد نداء معينة. يجب أن تعيد دالة رد النداء القيمة true ليُحذف العنصر من المجموعة الناتجة:

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

$filtered = $collection->reject(function ($value, $key) {

   return $value > 2;
});

$filtered->all();

// [1, 2]

لعكس وظيفة reject، انظر التابع filter.

()reverse

يعكس التابع ترتيب عناصر المجموعة محافظًا على المفاتيح الأصلية:

$collection = collect(['a', 'b', 'c', 'd', 'e']);

$reversed = $collection->reverse();

$reversed->all();

/*

   [
       4 => 'e',
       3 => 'd',
       2 => 'c',
       1 => 'b',
       0 => 'a',
   ]
*/

()search

يبحث التابع عن قيمة معينة ويعيد مفتاحها. إذا لم توجد القيمة المطلوبة فسيعيد التابع القيمة false:

$collection = collect([2, 4, 6, 8]);
$collection->search(4);

// 1

يقارن هذا التابع مقارنة غير صارمة أي أن سلسلةً نصيةً تحتوي على رقمٍ تعدّ مساويةً للقيمة الرقمية. لاستعمال مقارنة صارمة، مرّر true كمعامل ثاني إلى التابع:

$collection->search('4', true);

// false

بشكلٍ بديل، يمكنك تمرير دالة رد النداء الخاصة بك للبحث عن العنصر الأول الذي يحقق شرط الصحة الذي تحدّده:

$collection->search(function ($item, $key) {

   return $item > 5;
});

// 2

()shift

يحذف التابع ويعيد العنصر الأول من المجموعة

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

$collection->shift();

// 1

$collection->all();

// [2, 3, 4, 5]

()shuffle

يخلط التابع العناصر عشوائيًا:

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

$shuffled = $collection->shuffle();

$shuffled->all();

// [3, 2, 5, 1, 4] - (generated randomly)

()slice

يعيد التابع قطعة من المجموعة بدءًا من مكان محدّد:

$collection = collect([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);
$slice = $collection->slice(4);
$slice->all();

// [5, 6, 7, 8, 9, 10]

إذا أردت تحديد حجم القطعة مرّر الحجم كمعامل ثاني للتابع:

$slice = $collection->slice(4, 2);

$slice->all();

// [5, 6]

تحافظ القطعة على المفاتيح الأصلية، إذا لم ترد الحفاظ عليها فاستخدم التابع values لإعادة تسميتها.

()sort

يُرتِّب التابع المجموعة. تحافظ المجموعة الناتجة على المفاتيح الأصلية لذا سنستعمل في المثال التابع values لإعادة تعيين المفاتيح لأعداد متتالية:

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

$sorted = $collection->sort();

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

// [1, 2, 3, 4, 5]

إذا احتجت ترتيبًا أكثر تعقيدًا، يمكنك تمرير دالة رد نداء للمنطق المتبع في طريقة الترتيب الخاصة بك. راجع توثيق الدالة uasort في PHP وهي طريقة الترتيب الذي يعتمدها التابع sort وراء الكواليس.

ملاحظة: إذا احتجت إلى ترتيب مجموعة مصفوفات متداخلة أو كائنات فراجع التابعين sortBy و sortByDesc.

()sortBy

يرتب التابع المجموعة حسب مفتاح ممرّر. تحافظ المجموعة المرتَّبة على المفاتيح الأصلية لذا في هذا المثال سنستعمل التابع values لإعادة تعيين المفاتيح لأعداد متتالية:

$collection = collect([

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

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

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

/*

   [
       ['name' => 'Chair', 'price' => 100],
       ['name' => 'Bookcase', 'price' => 150],
       ['name' => 'Desk', 'price' => 200],
   ]
*/

يمكنك تمرير دالة رد النداء الخاصة بك لتحديد طريقة الترتيب:

$collection = collect([

   ['name' => 'Desk', 'colors' => ['Black', 'Mahogany']],
   ['name' => 'Chair', 'colors' => ['Black']],
   ['name' => 'Bookcase', 'colors' => ['Red', 'Beige', 'Brown']],
]);

$sorted = $collection->sortBy(function ($product, $key) {

   return count($product['colors']);
});

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

/*

   [
       ['name' => 'Chair', 'colors' => ['Black']],
       ['name' => 'Desk', 'colors' => ['Black', 'Mahogany']],
       ['name' => 'Bookcase', 'colors' => ['Red', 'Beige', 'Brown']],
   ]
*/

()sortByDesc

هذا التابع شبيه بالتابع sortBy لكنه يرتب العناصر ترتيبًا معاكسًا.

()sortKeys

يرتب التابع المجموعة حسب مفاتيح المصفوفة المعالجة:

$collection = collect([

   'id' => 22345,
   'first' => 'John',
   'last' => 'Doe',
]);

$sorted = $collection->sortKeys();

$sorted->all();

/*

   [
       'first' => 'John',
       'id' => 22345,
       'last' => 'Doe',
   ]
*/

()sortKeysDesc

هذا التابع شبيه بالتابع sortKeys لكنه يرتّب المجموعة ترتيبًا معاكسًا.

()splice

يحذف التابع ويعيد قطعةً من المجموعة بدءًا من موضع محدّد:

$collection = collect([1, 2, 3, 4, 5]);
$chunk = $collection->splice(2);
$chunk->all();

// [3, 4, 5]

$collection->all();

// [1, 2]

يمكنك تمرير معامل ثاني لتحديد حجم القطعة:

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

$chunk = $collection->splice(2, 1);

$chunk->all();

// [3]

$collection->all();

// [1, 2, 4, 5]

يمكنك أيضًا تمرير معامل ثالث يحتوي عناصر جديدة لتعويض العناصر المحذوفة من المجموعة الأصلية:

$collection = collect([1, 2, 3, 4, 5]);
$chunk = $collection->splice(2, 1, [10, 11]);
$chunk->all();

// [3]

$collection->all();

// [1, 2, 10, 11, 4, 5]

()split

يقسم التابع المجموعة لعدد ممرّر من المجموعات:

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

$groups = $collection->split(3);

$groups->toArray();

// [[1, 2], [3, 4], [5]]

()sum

يعيد التابع مجموع عناصر المجموعة:

collect([1, 2, 3, 4, 5])->sum();

// 15

إذا كانت المجموعة تحتوي مصفوفات متداخلة، يجب تمرير مفتاح لتحديد العناصر التي يجب جمعها:

$collection = collect([

   ['name' => 'JavaScript: The Good Parts', 'pages' => 176],
   ['name' => 'JavaScript: The Definitive Guide', 'pages' => 1096],
]);

$collection->sum('pages');

// 1272

يمكنك أيضًا تمرير دالة رد نداء خاصة بك لتحديد أي القيم ستُجمَع:

$collection = collect([

   ['name' => 'Chair', 'colors' => ['Black']],
   ['name' => 'Desk', 'colors' => ['Black', 'Mahogany']],
   ['name' => 'Bookcase', 'colors' => ['Red', 'Beige', 'Brown']],
]);

$collection->sum(function ($product) {

   return count($product['colors']);
});

// 6

()take

يعيد التابع مجموعةً جديدةً ذاتُ عناصرٍ محددّة:

$collection = collect([0, 1, 2, 3, 4, 5]);
$chunk = $collection->take(3);
$chunk->all();

// [0, 1, 2]

يمكنك تمرير عدد سالب لأخذ عدد من العناصر من آخر المجموعة:

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

$chunk = $collection->take(-2);

$chunk->all();

// [4, 5]

()tap

يمرّر التابع المجموعة لدالة رد نداء معيّنة. ويسمح لك بالدخول للمجموعة من نقطة محدّدة والقيام بعمل ما على العنصر دون المساس بالمجموعة ككل:

collect([2, 4, 3, 1, 5])

   ->sort()
   ->tap(function ($collection) {
       Log::debug('Values after sorting', $collection->values()->toArray());
   })
   ->shift();
// 1

()times

يُنشِئ التابع الساكن مجموعة جديدة عبر استعمال دالة رد نداء عددًا محددًا من المرات:

$collection = Collection::times(10, function ($number) {

   return $number * 9;
});

$collection->all();

// [9, 18, 27, 36, 45, 54, 63, 72, 81, 90]

يكون هذا التابع مفيدًا عند استعماله مع المصانع لإنشاء نماذج Eloquent:

$categories = Collection::times(3, function ($number) {

   return factory(Category::class)->create(['name' => 'Category #'.$number]);
});

$categories->all();

/*

   [
       ['id' => 1, 'name' => 'Category #1'],
       ['id' => 2, 'name' => 'Category #2'],
       ['id' => 3, 'name' => 'Category #3'],
   ]
*/

()toArray

يحوّل التابع المجموعة لمصفوفة PHP. إذا كانت مكوّنات المجموعة نماذج Eloquent، تتحوّل النماذج أيضا لمصفوفات:

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

$collection->toArray();

/*

   [
       ['name' => 'Desk', 'price' => 200],
   ]
*/

تنبيه: يحوّل toArray كل الكائنات المتداخلة في المجموعة لمصفوفات. إذا أردت الحصول على المصفوفة الخام استعمل التابع all بدلًا منه.

()toJson

يحوّل التابع toJson المجموعة لسلسلة JSON:

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

$collection->toJson();

// '{"name":"Desk", "price":200}'

()transform

يكرّر التابع transform عناصر المجموعة ويستعمل دالة رد نداء مع كل عنصر. يعوّض العناصر في المجموعة بنتائج النداءات:

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

$collection->transform(function ($item, $key) {

   return $item * 2;
});

$collection->all();

// [2, 4, 6, 8, 10]

تنبيه: على عكس أغلب توابع المجموعات، يغيّر التابع المجموعة الأصلية. إذا أردت إنشاء مجموعة جديدة فاستعمل التابع map بدلًا منه.

()union

يضيف التابع المصفوفة الممرّرة للمجموعة. إذا احتوت المصفوفة مفاتيح موجودة في المجموعة الأصلية، فستُفضَّل قيم المجموعة الأصلية:

$collection = collect([1 => ['a'], 2 => ['b']]);

$union = $collection->union([3 => ['c'], 1 => ['b']]);

$union->all();

// [1 => ['a'], 2 => ['b'], 3 => ['c']]

()unique

يعيد التابع قيمة فريدة في المجموعة. تحتفظ مجموعة النتيجة بالمفاتيح الأصلية لذا في هذا المثال سنستعمل التابع values لإعادة تعيين المفاتيح لأعداد متتالية:

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

$unique = $collection->unique();

$unique->values()->all();

// [1, 2, 3, 4]

عند العمل مع المصفوفات المتداخلة أو الكائنات، يمكن تحديد المفتاح المستعمل لتحديد الفرادة:

$collection = collect([

   ['name' => 'iPhone 6', 'brand' => 'Apple', 'type' => 'phone'],
   ['name' => 'iPhone 5', 'brand' => 'Apple', 'type' => 'phone'],
   ['name' => 'Apple Watch', 'brand' => 'Apple', 'type' => 'watch'],
   ['name' => 'Galaxy S6', 'brand' => 'Samsung', 'type' => 'phone'],
   ['name' => 'Galaxy Gear', 'brand' => 'Samsung', 'type' => 'watch'],
]);

$unique = $collection->unique('brand');

$unique->values()->all();

/*

   [
       ['name' => 'iPhone 6', 'brand' => 'Apple', 'type' => 'phone'],
       ['name' => 'Galaxy S6', 'brand' => 'Samsung', 'type' => 'phone'],
   ]
*/

يمكنك أيضا تمرير دالة رد النداء الخاصة بك لتحديد الفرادة:

$unique = $collection->unique(function ($item) {

   return $item['brand'].$item['type'];
});

$unique->values()->all();

/*

   [
       ['name' => 'iPhone 6', 'brand' => 'Apple', 'type' => 'phone'],
       ['name' => 'Apple Watch', 'brand' => 'Apple', 'type' => 'watch'],
       ['name' => 'Galaxy S6', 'brand' => 'Samsung', 'type' => 'phone'],
       ['name' => 'Galaxy Gear', 'brand' => 'Samsung', 'type' => 'watch'],
   ]
*/

يستعمل التابع مقارنة غير صارمة أي أن السلاسل النصية التي تحتوي رقمًا تعدّ مساويةً لعددٍ له القيمة الرقمية. استعمل التابع uniqueStrict لمقارنةٍ أكثر صرامةً.

()uniqueStrict

هذا التابع شبيه بالتابع unique لكنه يستعمل مقارنةً صارمةً.

()unless

ينفذ التابع دالة رد النداء الممرَّرة إلا في حالة كان المعامل الأول الممرّر true:

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

$collection->unless(true, function ($collection) {

   return $collection->push(4);
});

$collection->unless(false, function ($collection) {

   return $collection->push(5);
});

$collection->all();

// [1, 2, 3, 5]

لعكس وظيفة التابع استعمل التابع when.

()unwrap

يعيد التابع عناصر المجموعة من القيم الممرّرة عند إمكانية التطبيق:

Collection::unwrap(collect('John Doe'));

// ['John Doe']

Collection::unwrap(['John Doe']);

// ['John Doe']

Collection::unwrap('John Doe');

// 'John Doe'

()values

يعيد التابع مجموعةً جديدةً مع إعادة ضبط المفاتيح لأعداد متتالية:

Collection::unwrap(collect('John Doe'));

// ['John Doe']

Collection::unwrap(['John Doe']);

// ['John Doe']

Collection::unwrap('John Doe');

// 'John Doe'

()when

ينفذّ التابع النداء الممرّر عندما تكون قيمة المعامل الأول true:

$collection = collect([1, 2, 3]);
$collection->when(true, function ($collection) {

   return $collection->push(4);
});

$collection->when(false, function ($collection) {

   return $collection->push(5);
});

$collection->all();

// [1, 2, 3, 4]

لعكس وظيفة when استعمل التابع unless.

()where

يرشِّح التابع المجموعة عبر الزوج المفتاح/القيمة الممرّر:

$collection = collect([

   ['product' => 'Desk', 'price' => 200],
   ['product' => 'Chair', 'price' => 100],
   ['product' => 'Bookcase', 'price' => 150],
   ['product' => 'Door', 'price' => 100],
]);

$filtered = $collection->where('price', 100);

$filtered->all();

/*

   [
       ['product' => 'Chair', 'price' => 100],
       ['product' => 'Door', 'price' => 100],
   ]
*/

يستعمل التابع مقارنة غير صارمة أي أن السلاسل النصية التي تحتوي رقمًا تعدّ مساويةً لعدد بنفس القيمة الرقمية. استعمل التابع whereStrict لمقارنةٍ أكثر صرامةً.

()whereStrict

يشبه هذا التابع عمل where لكنه يستعمل مقارنةً صارمةً.

()whereIn

يرشِّح التابع المجموعة عبر الزوج المفتاح\القيمة المحتواة في المصفوفة الممرّرة:

$collection = collect([

   ['product' => 'Desk', 'price' => 200],
   ['product' => 'Chair', 'price' => 100],
   ['product' => 'Bookcase', 'price' => 150],
   ['product' => 'Door', 'price' => 100],
]);

$filtered = $collection->whereIn('price', [150, 200]);

$filtered->all();

/*

   [
       ['product' => 'Bookcase', 'price' => 150],
       ['product' => 'Desk', 'price' => 200],
   ]
*/

يستعمل التابع مقارنة غير صارمة أي أن السلاسل النصية التي تحتوي رقمًا تعدّ مساويةً لعددٍ بنفس القيمة الرقمية. استعمل التابع whereInStrict لمقارنةٍ أكثر صرامةً.

()whereInStrict

يشبه هذا التابع عمل whereIn لكنه يستعمل مقارنةً صارمة.

()whereInstanceOf

يرشِّح التابع المجموعة حسب صنف ممرّر:

$collection = collect([

   new User,
   new User,
   new Post,
]);

return $collection->whereInstanceOf(User::class);

()whereNotIn

يرشِّح التابع المجموعة حسب زوج المفتاح/القيمة غير مجموعة في المصفوفة الممرّرة:

$collection = collect([

   ['product' => 'Desk', 'price' => 200],
   ['product' => 'Chair', 'price' => 100],
   ['product' => 'Bookcase', 'price' => 150],
   ['product' => 'Door', 'price' => 100],
]);

$filtered = $collection->whereNotIn('price', [150, 200]);

$filtered->all();

/*

   [
       ['product' => 'Chair', 'price' => 100],
       ['product' => 'Door', 'price' => 100],
   ]
*/

يستعمل التابع مقارنة غير صارمة أي أن السلاسل النصية التي تحتوي رقمًا تعدّ مساويةً لعددٍ بنفس القيمة الرقمية. استعمل التابع whereNotInStrict لمقارنةٍ أكثر صرامة.

()whereNotInStrict

يشبه هذا التابع عمل whereNotIn لكنه يستعمل مقارنةً صارمةً.

()wrap

يغلِّف التابع الثابت القيمة في مجموعة عند تطبيقه:

$collection = Collection::wrap('John Doe');

$collection->all();

// ['John Doe']

$collection = Collection::wrap(['John Doe']);

$collection->all();

// ['John Doe']

$collection = Collection::wrap(collect('John Doe'));

$collection->all();

// ['John Doe']

()zip

يدمج التابع zip قيم المصفوفات الممرّرة في المواضع المناسبة:

$collection = collect(['Chair', 'Desk']);

$zipped = $collection->zip([100, 200]);

$zipped->all();

// [['Chair', 100], ['Desk', 200]]

الرسائل ذات الترتيب العالي

توفّر المجموعات دعمًا للرسائل ذات الترتيب العالي (higher order messages)، وهي طرق مختصرة لتنفيذ أعمال شائعة على المجموعات. التوابع التي توفر رسائل ذات ترتيب عالي هي: average و avg و contains و each و every و filter و first و flatMap و groupBy و keyBy و map و max و min و partition و reject و sortBy و sortByDesc و sum و unique.

يمكن الوصول لكل رسالة ذات ترتيب عالي كخاصية ديناميكية لكائن المجموعة. مثلًا، لنستعمل رسائل التابع each لنداء تابع مع كل عنصر في المجموعة:

$users = User::where('votes', '>', 500)->get();

$users->each->markAsVip();

بنفس الطريقة، يمكن استعمال رسائل sum لجمع أصوات (votes) مجموعة مستخدمين:

$users = User::where('group', 'Development')->get();

return $users->sum->votes;

مصادر