إزالة عنصر من مصفوفة في PHP: دليل مبسط للمبتدئين

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

كيفية إزالة عنصر من مصفوفة في PHP: من المبتدئ إلى المحترف

\n\n

تخيل أنك تبني متجرًا إلكترونيًا باستخدام PHP. وصل طلب، ونفد منتج من المخزون — تحتاج إلى إزالته من سلة التسوق. أو أنك تعالج قائمة مستخدمين، وأحدهم قرر حذف حسابه. في كلتا الحالتين، ستحتاج إلى إزالة عنصر من مصفوفة في PHP.

\n\n

قد يبدو الأمر بسيطًا، لكن المبتدئين يقعون في فخ شائع. مجرد استدعاء unset() قد يفسد المصفوفة: تصبح المفاتيح غير متسلسلة، ويبدأ التكرار foreach في إحداث مفاجآت غير متوقعة. لا تقلق، سنشرح جميع العقبات ونتعلم كيفية إزالة العناصر بشكل صحيح.

\n\n

هذه المقالة مأخوذة من سؤال شائع على 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
\n\n

الطريقة الأولى: unset() — القوة الغاشمة (وعواقبها)

\n\n

الدالة unset($array[$key]) هي الطريقة الأكثر وضوحًا لإزالة عنصر من مصفوفة في PHP. إنها ببساطة تدمر المتغير أو عنصر المصفوفة.

\n\n
<?php\n$fruits = ['تفاح', 'موز', 'كرز', 'تمر'];\nunset($fruits[1]); // إزالة 'موز'\nprint_r($fruits);\n?>
\n\n

النتيجة:

\n\n
Array\n(\n    [0] => تفاح\n    [2] => كرز\n    [3] => تمر\n)
\n\n

لاحظ: الفهرس 1 اختفى، لكن بقية الفهارس لم تتغير. الآن لدينا مصفوفة بفجوة: 0, 2, 3. إذا حاولت التكرار عليها باستخدام حلقة for مع $i = 0; $i < count($array); $i++ — فستحصل على خطأ عند الفهرس 1 لأنه لم يعد موجودًا.

\n\n

متى تستخدم unset():

\n
    \n
  • للمصفوفات الترابطية (المفاتيح نصوص) — الفجوات ليست مشكلة هنا.
  • \n
  • عندما لا يهمك ترتيب الفهارس.
  • \n
\n\n

متى لا تستخدمها:

\n
    \n
  • للمصفوفات المفهرسة حيث التسلسل مهم (0,1,2...).
  • \n
  • إذا كنت تخطط لتحويل المصفوفة إلى JSON أو تسلسلها — الفجوات قد تكسر المنطق في الطرف الآخر.
  • \n
\n\n
\n\n

الطريقة الثانية: array_splice() — الإزالة مع إعادة الترتيب

\n\n

إذا كنت تريد إزالة عنصر من مصفوفة في PHP مع الحفاظ على فهارس رقمية متسلسلة — استخدم array_splice(). هذه الدالة لا تقوم فقط بالإزالة، بل تقوم أيضًا بـ"طي" المصفوفة تلقائيًا.

\n\n
<?php\n$fruits = ['تفاح', 'موز', 'كرز', 'تمر'];\narray_splice($fruits, 1, 1); // بدءًا من الفهرس 1، إزالة عنصر واحد\nprint_r($fruits);\n?>
\n\n

النتيجة:

\n\n
Array\n(\n    [0] => تفاح\n    [1] => كرز\n    [2] => تمر\n)
\n\n

أصبحت الفهارس 0, 1, 2 مرة أخرى. رائع! array_splice() تأخذ ثلاث معاملات:

\n
    \n
  • المصفوفة (تُمرر كمرجع — المصفوفة الأصلية ستتغير).
  • \n
  • فهرس البداية.
  • \n
  • عدد العناصر المراد إزالتها (إذا لم تحدده، ستتم إزالة كل العناصر حتى النهاية).
  • \n
\n\n

مكافأة: هذه الدالة تُرجع العناصر المحذوفة، لذا يمكنك حفظها:

\n\n
<?php\n$removed = array_splice($fruits, 1, 1);\necho "تمت الإزالة: " . $removed[0]; // موز\n?>
\n\n

العيب: تعمل فقط مع الفهارس الرقمية. بالنسبة للمصفوفات الترابطية، لا تعمل.

المدونات

توصيات الكتب