كيفية إزالة عنصر من مصفوفة في PHP: من المبتدئ إلى المحترف
\n\nتخيل أنك تبني متجرًا إلكترونيًا باستخدام PHP. وصل طلب، ونفد منتج من المخزون — تحتاج إلى إزالته من سلة التسوق. أو أنك تعالج قائمة مستخدمين، وأحدهم قرر حذف حسابه. في كلتا الحالتين، ستحتاج إلى إزالة عنصر من مصفوفة في PHP.
\n\nقد يبدو الأمر بسيطًا، لكن المبتدئين يقعون في فخ شائع. مجرد استدعاء unset() قد يفسد المصفوفة: تصبح المفاتيح غير متسلسلة، ويبدأ التكرار foreach في إحداث مفاجآت غير متوقعة. لا تقلق، سنشرح جميع العقبات ونتعلم كيفية إزالة العناصر بشكل صحيح.
هذه المقالة مأخوذة من سؤال شائع على Stack Overflow حصد آلاف المشاهدات. قمنا بترجمة الإجابات المعقدة إلى لغة بسيطة وأضفنا أمثلة من التطبيق العملي.
\n\nما هي المصفوفة في PHP ولماذا نحتاج إلى تنظيفها؟
\n\nالمصفوفة هي حاوية للبيانات. تخيل صندوقًا به خلايا، لكل خلية رقم (فهرس) أو اسم (مفتاح). أحيانًا تصبح البيانات في هذه الخلايا قديمة وتحتاج إلى التخلص منها.
\n\nفي PHP، هناك نوعان من المصفوفات:
\n\n- \n
- مفهرسة (Indexed) — المفاتيح: 0, 1, 2, 3... (مثل قائمة المنتجات). \n
- ترابطية (Associative) — المفاتيح: نصوص (مثل
"name" => "أحمد"). \n
ولكل نوع طريقة "صحيحة" للإزالة. إذا خلطت بينهما، فستحصل على خطأ يصعب تتبعه.
\n\n\n\n
الطريقة الأولى: unset() — القوة الغاشمة (وعواقبها)
\n\nالدالة unset($array[$key]) هي الطريقة الأكثر وضوحًا لإزالة عنصر من مصفوفة في PHP. إنها ببساطة تدمر المتغير أو عنصر المصفوفة.
<?php\n$fruits = ['تفاح', 'موز', 'كرز', 'تمر'];\nunset($fruits[1]); // إزالة 'موز'\nprint_r($fruits);\n?>\n\nالنتيجة:
\n\nArray\n(\n [0] => تفاح\n [2] => كرز\n [3] => تمر\n)\n\nلاحظ: الفهرس 1 اختفى، لكن بقية الفهارس لم تتغير. الآن لدينا مصفوفة بفجوة: 0, 2, 3. إذا حاولت التكرار عليها باستخدام حلقة for مع $i = 0; $i < count($array); $i++ — فستحصل على خطأ عند الفهرس 1 لأنه لم يعد موجودًا.
متى تستخدم unset():
\n- \n
- للمصفوفات الترابطية (المفاتيح نصوص) — الفجوات ليست مشكلة هنا. \n
- عندما لا يهمك ترتيب الفهارس. \n
متى لا تستخدمها:
\n- \n
- للمصفوفات المفهرسة حيث التسلسل مهم (0,1,2...). \n
- إذا كنت تخطط لتحويل المصفوفة إلى JSON أو تسلسلها — الفجوات قد تكسر المنطق في الطرف الآخر. \n
\n\n
الطريقة الثانية: array_splice() — الإزالة مع إعادة الترتيب
\n\nإذا كنت تريد إزالة عنصر من مصفوفة في PHP مع الحفاظ على فهارس رقمية متسلسلة — استخدم array_splice(). هذه الدالة لا تقوم فقط بالإزالة، بل تقوم أيضًا بـ"طي" المصفوفة تلقائيًا.
<?php\n$fruits = ['تفاح', 'موز', 'كرز', 'تمر'];\narray_splice($fruits, 1, 1); // بدءًا من الفهرس 1، إزالة عنصر واحد\nprint_r($fruits);\n?>\n\nالنتيجة:
\n\nArray\n(\n [0] => تفاح\n [1] => كرز\n [2] => تمر\n)\n\nأصبحت الفهارس 0, 1, 2 مرة أخرى. رائع! array_splice() تأخذ ثلاث معاملات:
- \n
- المصفوفة (تُمرر كمرجع — المصفوفة الأصلية ستتغير). \n
- فهرس البداية. \n
- عدد العناصر المراد إزالتها (إذا لم تحدده، ستتم إزالة كل العناصر حتى النهاية). \n
مكافأة: هذه الدالة تُرجع العناصر المحذوفة، لذا يمكنك حفظها:
\n\n<?php\n$removed = array_splice($fruits, 1, 1);\necho "تمت الإزالة: " . $removed[0]; // موز\n?>\n\nالعيب: تعمل فقط مع الفهارس الرقمية. بالنسبة للمصفوفات الترابطية، لا تعمل.