تعيد array_slice($array, $offset, $length) مصفوفة جديدة فيها $length من العناصر بدءًا من الموضع $offset. ولا تتغير المصفوفة الأصلية. احذف $length لتأخذ كل شيء حتى النهاية.
الإزاحة موضع (0 هو العنصر الأول)، لا مفتاح. وهذا مهم للمصفوفات الترابطية وللمصفوفات التي ليست مفاتيحها 0, 1, 2.
الحصول على آخر N عنصر بإزاحة سالبة
الإزاحة السالبة تُعدّ من النهاية: -1 هو العنصر الأخير، و-3 تبدأ من الثالث قبل النهاية. والطول السالب يتوقف قبل النهاية بذلك العدد من العناصر.
طلب عناصر أكثر مما يوجد لا مشكلة فيه: تعيد array_slice($log, 0, 100) العناصر الخمسة كلها.
الاحتفاظ بالمفاتيح الأصلية بـ preserve_keys
يُعاد ترقيم المفاتيح الصحيحة من 0 ما لم تمرر true وسيطًا رابعًا. أما المفاتيح النصية فتُحفظ دائمًا.
استخدم true عندما يكون للمفاتيح معنى، مثل معرّفات قاعدة البيانات، وستبحث عن العناصر بها لاحقًا.
تقسيم مصفوفة إلى صفحات بـ array_slice
عرض الصفحة $page من قائمة فيها $perPage عنصرًا في كل صفحة هو اقتطاع واحد: الإزاحة هي ($page - 1) * $perPage. يطبع هذا المثال قائمة HTML مع روابط للصفحات. شغّله وانقر على رقم صفحة: يعمل السكربت نفسه مرة أخرى مع ضبط $_GET['page'] من الرابط.
يُبقي السطر max(1, min($pages, ...)) قيمة مكتوبة يدويًا مثل ?page=99 أو ?page=-1 ضمن النطاق الصحيح. مع قاعدة بيانات ستطلب صفحة واحدة فقط بـ LIMIT وOFFSET بدل تحميل كل الصفوف، لكن لقائمة موجودة في الذاكرة أصلًا، تؤدي array_slice المهمة كلها.
array_slice مقابل array_splice
يختلف الاسمان بحرف واحد ويفعلان بالأصل شيئين متعاكسين. تنسخ array_slice جزءًا إلى الخارج. وتقتطع array_splice الجزء من المصفوفة التي تمررها، وتعيد ترقيمها، وتعيد العناصر المحذوفة. وتستطيع أيضًا إدراج بدائل مكان القطع.
array_slice | array_splice | |
|---|---|---|
| تغيّر الأصل | لا | نعم (بالمرجع) |
| تعيد | الجزء المحدد | الجزء المحذوف |
| تستطيع إدراج عناصر | لا | نعم، الوسيط الرابع |
| المفاتيح الصحيحة | يُعاد ترقيمها ما لم تُستخدم preserve_keys | يُعاد ترقيمها |
لطرق أخرى لحذف العناصر، راجع حذف العناصر من مصفوفة.
تقسيم مصفوفة إلى أجزاء
عندما تحتاج إلى كل الصفحات معًا، مثلًا لعرض المنتجات في صفوف من ثلاثة، تقوم array_chunk بالاقتطاع المتكرر نيابة عنك.
غيّر 3 إلى 2 أو 4 وشغّله مرة أخرى. ويحمل الجزء الأخير ما تبقى.
الأسئلة الشائعة
كيف أحصل على أول N عنصر من مصفوفة في PHP؟
تعيد array_slice($arr, 0, 3) أول ثلاثة عناصر. وإذا كان في المصفوفة أقل من ثلاثة، تحصل عليها كلها دون خطأ.
كيف أحصل على آخر N عنصر من مصفوفة؟
استخدم إزاحة سالبة: تعيد array_slice($arr, -3) آخر ثلاثة عناصر. وحذف الطول يعني "حتى النهاية".
ماذا يفعل preserve_keys في array_slice؟
افتراضيًا تعيد array_slice ترقيم المفاتيح الصحيحة من 0. مرّر true وسيطًا رابعًا، array_slice($arr, 2, 3, true)، لتحتفظ بالمفاتيح الصحيحة الأصلية. أما المفاتيح النصية فتُحفظ دائمًا، معه أو دونه.
ما الفرق بين array_slice وarray_splice؟
تعيد array_slice نسخة من جزء من المصفوفة وتترك الأصل كما هو. وتأخذ array_splice المصفوفة بالمرجع، فتحذف ذلك الجزء منها (وتُدرج بدائل اختياريًا) وتعيد ما حذفته.