Menu
flag Ar iconالعربيةdown icon

الدالة explode() في PHP: تقسيم نص إلى مصفوفة

تقسّم explode(',', $string) نصًا عند كل فاصلة وتعيد الأجزاء في مصفوفة. تعلّم وسيط الحد، والتقسيم عند السطر الجديد، وتشذيب الأجزاء، ومتى تكون str_split أو preg_split الأداة الأفضل.

تحتوي هذه الصفحة على محررات قابلة للتشغيل - حرّر، شغّل، وشاهد النتيجة فوراً.

تقسّم explode($separator, $string) نصًا عند كل ظهور لـ $separator وتعيد الأجزاء في مصفوفة. تعطي explode(',', 'apple,banana,cherry') المصفوفة ['apple', 'banana', 'cherry'].

يمكن أن يكون الفاصل أي نص، لا محرفًا واحدًا فقط: تعمل explode(' and ', 'tea and milk and sugar') بالطريقة نفسها. والعملية المعاكسة، ضم مصفوفة مرة أخرى في نص، هي implode().

الصيغة والقيمة المعادة

explode(string $separator, string $string, int $limit = PHP_INT_MAX): array

تعيد دائمًا مصفوفة. وإذا لم يظهر الفاصل، تحمل المصفوفة النص كله عنصرًا وحيدًا. ويشمل ذلك النص الفارغ، الذي يعطي مصفوفة فيها نص فارغ واحد، وهو مصدر شائع لأخطاء «حلقتي تعمل مرة واحدة على مُدخل فارغ».

تحديد عدد الأجزاء

يغيّر الوسيط الثالث، $limit، عدد الأجزاء التي تحصل عليها:

  • الحد الموجب يعيد ذلك العدد من الأجزاء على الأكثر. ويحمل الجزء الأخير بقية النص، بما فيها الفواصل.
  • الحد السالب يعيد كل الأجزاء ما عدا آخر abs($limit) منها.
  • الحد 0 يُعامل على أنه 1.

الحد الموجب هو الأداة الصحيحة عندما لا يهم إلا الفاصل الأول، مثل سطر key=value قد تحتوي قيمته على = أيضًا: تعطي explode('=', 'query=a=b', 2) المصفوفة ['query', 'a=b']. وتستخدمه الأقسام التالية بهذه الطريقة.

للحصول على الجزء الأخير فقط، خزّن المصفوفة في متغير أولًا: $parts = explode('/', $path); $file = end($parts);. كتابة end(explode('/', $path)) تعيد القيمة الصحيحة مع ذلك، لكن PHP تطبع Notice: Only variables should be passed by reference، لأن end() تأخذ وسيطها بالمرجع.

تقسيم نص عند السطر الجديد

تقسّم explode("\n", $text) عند فواصل الأسطر. استخدم علامتي التنصيص المزدوجتين: داخل علامتي التنصيص المفردتين تكون '\n' شرطة مائلة عكسية يليها الحرف n، لا سطرًا جديدًا. وكثيرًا ما تنهي النصوص القادمة من ملفات Windows أو نماذج HTML أسطرها بـ "\r\n"، فيبقى "\r" زائد في نهاية كل جزء. تقسّم preg_split('/\R/', $text) عند أي نوع من فواصل الأسطر.

تشذيب الأجزاء وإسقاط الفارغ منها

مُدخلات المستخدم مثل "red, green , ,blue" فيها مسافات حول العناصر وعنصر فارغ في الوسط. مرّر الأجزاء عبر trim() بـ array_map()، ثم احذف النصوص الفارغة بـ array_filter(). تعيد array_values() ترقيم المفاتيح بعد ذلك، لأن array_filter() تحتفظ بالمفاتيح الأصلية.

تُبقي دالة الاستدعاء fn($c) => $c !== '' النص "0". أما array_filter($colors) المجردة فتُسقطه، لأن "0" خاطئ منطقيًا.

تحويل نص إلى مصفوفة ترابطية

كثيرًا ما تُخزَّن الإعدادات وملفات تعريف الارتباط والنصوص الشبيهة بالاستعلامات أزواجًا key=value. قسّم مرتين: مرة للأزواج، ومرة لكل زوج بحد 2، مع فك الجزأين إلى متغيرات (تفكيك المصفوفات).

الزوج الذي لا يحتوي =، مثل debug، يعطي مصفوفة بعنصر واحد، فيطبع التفكيك Warning: Undefined array key 1. أكمل النتيجة إلى عنصرين لتجنب ذلك: [$key, $value] = explode('=', $pair, 2) + [1 => ''];.

لنص استعلام حقيقي في رابط، تفعل parse_str() ذلك نيابة عنك وتفك أيضًا ترميز %20 و+.

التقسيم بعدة فواصل

تأخذ explode() فاصلًا واحدًا. للتقسيم عند الفواصل أو الفواصل المنقوطة أو المسافات، استخدم preg_split() مع فئة محارف. ويُسقط PREG_SPLIT_NO_EMPTY الأجزاء الفارغة التي ينشئها فاصلان متتاليان.

النصوص اليابانية ونصوص UTF-8 الأخرى

تقارن explode() البايتات، وفي UTF-8 لا يظهر محرف كامل أبدًا داخل بايتات محرف آخر، لذا فإن تقسيم نص ياباني عند فاصل ياباني مثل 、 أو فاصلة كاملة العرض يعمل بشكل صحيح.

explode مقابل str_split مقابل preg_split

الدالةتقسّم عندمثالالنتيجة
explode()نص فاصل ثابتexplode('-', '2026-03-14')['2026', '03', '14']
str_split()كل N بايتstr_split('abcdef', 2)['ab', 'cd', 'ef']
mb_str_split()كل N محرفmb_str_split('日本語')['日', '本', '語']
preg_split()تعبير نمطيpreg_split('/\s+/', 'a b')['a', 'b']

لا تقوم explode() بأي عمل للتعابير النمطية، لذا فهي أسرع من preg_split() وهي التي تختارها كلما كان الفاصل نصًا ثابتًا.

خطأ شائع: فاصل فارغ

الفاصل الفارغ خطأ. منذ PHP 8.0 ترمي explode('', 'abc') الخطأ ValueError بدل إعادة false، ويتوقف السكربت:

PHP Fatal error:  Uncaught ValueError: explode(): Argument #1 ($separator) cannot be empty in /home/index.php:3

لتقسيم نص إلى محارف، استخدم str_split('abc') للنصوص بترميز ASCII أو mb_str_split($s) لأي نص قد يحتوي محارف متعددة البايتات.

الأسئلة الشائعة

ماذا تفعل explode() في PHP؟

تقسّم نصًا عند كل ظهور لفاصل وتعيد الأجزاء في مصفوفة: تعيد explode(',', 'a,b,c') المصفوفة ['a', 'b', 'c']. ولا يُضمَّن الفاصل نفسه في أي جزء.

ماذا تعيد explode() إذا لم يُوجد الفاصل؟

مصفوفة بعنصر واحد هو النص كله: تعيد explode(',', 'apple') المصفوفة ['apple']. والنص الفارغ يعطي ['']، أي مصفوفة فيها نص فارغ واحد، لذا تعيد count() القيمة 1 لا 0.

كيف أقسّم نصًا بعدة فواصل في PHP؟

استخدم preg_split() مع فئة محارف: تقسّم preg_split('/[,;|]/', $s) عند الفواصل والفواصل المنقوطة والخطوط العمودية. ولإسقاط الأجزاء الفارغة أيضًا، مرّر الحد -1 والعلم: preg_split('/[,;|]/', $s, -1, PREG_SPLIT_NO_EMPTY).

ما الفرق بين explode() وstr_split()؟

تقسّم explode() عند فاصل تختاره. وتقطّع str_split($s, 3) النص إلى أجزاء بطول ثابت، محسوب بالبايتات. للنصوص اليابانية أو متعددة البايتات الأخرى استخدم mb_str_split($s)، التي تعدّ المحارف.

لماذا ترمي explode() الخطأ ValueError؟

لأن الفاصل نص فارغ. منذ PHP 8.0، ترمي explode('', $s) الخطأ ValueError: explode(): Argument #1 ($separator) cannot be empty. لتقسيم نص إلى محارف مفردة استخدم str_split() أو mb_str_split().

رسم توضيحي للغات البرمجة في Coddy

تعلّم البرمجة مع Coddy

ابدأ الآن