الحصول على آخر حرف في سلسلة نصية PHP: 5 طرق مثبتة

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

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

ابدأ الدورة

كيفية الحصول على آخر حرف في سلسلة نصية PHP: دليل شامل للمبتدئين والمحترفين

\n\n

تخيل أنك تكتب سكريبتًا للتحقق مما إذا كان البريد الإلكتروني ينتهي بـ @gmail.com، أو تحتاج لاستخراج آخر حرف من اسم مستخدم. تبدو المهمة بسيطة — الحصول على آخر حرف في سلسلة نصية PHP. لكن المفاجأة أن هذه المهمة البسيطة تخفي العديد من التحديات، خاصة عند التعامل مع اللغة العربية، الرموز التعبيرية (Emoji)، أو الأحرف الخاصة.

\n\n

وفقًا لموقع Stack Overflow، فإن سؤال "How to get the last char of a string in PHP?" يحصل على آلاف المشاهدات شهريًا. وليس من المستغرب: فالمبتدئون غالبًا ما يقعون في أخطاء استخدام substr() مع المؤشرات السالبة، بينما يناقش المحترفون الأداء والتعامل الصحيح مع UTF-8.

\n\n

في هذه المقالة، سنستعرض 5 طرق عملية مع أمثلة كود حقيقية وتوصيات واضحة. هيا بنا!

\n\n

الطريقة الأولى: الكلاسيكية — substr() مع مؤشر سالب

\n\n

الطريقة الأكثر شيوعًا وإيجازًا. الدالة substr() تقبل قيمة سالبة للطول لعد الأحرف من نهاية السلسلة.

\n\n
<?php\n$string = "Hello, World!";\n$lastChar = substr($string, -1);\necho $lastChar; // الناتج: !\n?>
\n\n

المزايا:

\n
    \n
  • قصيرة وواضحة
  • \n
  • سريعة الأداء
  • \n
\n\n

العيوب:

\n
    \n
  • لا تدعم الترميز متعدد البايت (مثل العربية والصينية)
  • \n
  • قد تُرجع حرفًا مشوهًا للنصوص UTF-8
  • \n
\n\n

مثال على المشكلة مع اللغة العربية:

\n\n
<?php\n$string = "مرحبا";\n$lastChar = substr($string, -1);\necho $lastChar; // الناتج: � (علامة استفهام في معين)\n?>
\n\n

لماذا يحدث ذلك؟ لأن الأحرف العربية تشغل 2 بايت في UTF-8، بينما substr() تتعامل مع البايتات وليس الأحرف. هذه الطريقة مثالية للنصوص الإنجليزية، لكنها غير مناسبة للمشاريع متعددة اللغات.

\n\n

الطريقة الثانية: الصحيحة — mb_substr() للنصوص متعددة البايت

\n\n

إذا كان مشروعك يتعامل مع Unicode (وهو أمر ضروري اليوم)، استخدم mb_substr() من إضافة mbstring.

\n\n
<?php\n$string = "مرحبا بالعالم!";\n$lastChar = mb_substr($string, -1);\necho $lastChar; // الناتج: !\n?>
\n\n

والآن الجزء الممتع — التعامل مع الرموز التعبيرية (Emoji):

\n\n
<?php\n$string = "👋 مرحبا 🌍";\n$lastChar = mb_substr($string, -1);\necho $lastChar; // الناتج: 🌍\n?>
\n\n

المزايا:

\n
    \n
  • تعالج أي ترميز بشكل صحيح (UTF-8, UTF-16 وغيرها)
  • \n
  • تعمل مع الرموز التعبيرية والأحرف الخاصة
  • \n
\n\n

العيوب:

\n
    \n
  • تتطلب تثبيت إضافة mbstring (موجودة في معظم الاستضافات)
  • \n
  • أبطأ قليلاً من substr()
  • \n
\n\n

الطريقة الثالثة: البديل — str_split() و end()

\n\n

يمكنك تقسيم السلسلة إلى مصفوفة من الأحرف وأخذ العنصر الأخير. تبدو أنيقة، لكن لها تفاصيل دقيقة.

\n\n
<?php\n$string = "PHP";\n$chars = str_split($string);\n$lastChar = end($chars);\necho $lastChar; // الناتج: P\n?>
\n\n

تنبيه: str_split() أيضًا لا تتعامل مع النصوص متعددة البايت. للغة العربية، استخدم preg_split() مع علامة Unicode:

\n\n
<?php\n$string = "كود";\n$chars = preg_split('//u', $string, -1, PREG_SPLIT_NO_EMPTY);\n$lastChar = end($chars);\necho $lastChar; // الناتج: د\n?>
\n\n

المزايا:

\n
    \n
  • كود سهل الفهم
  • \n
  • يمكنك بسهولة الحصول على أي حرف وليس الأخير فقط
  • \n
\n\n

العيوب:

\n
    \n
  • استهلاك زائد للذاكرة (يتم إنشاء مصفوفة)
  • \n
  • أبطأ من الدوال المباشرة
  • \n
\n\n

الطريقة الرابعة: المتقدمة — iconv_substr() للترميزات الخاصة

المدونات

توصيات الكتب