كيفية تحويل سلسلة نصية إلى رقم في PHP: دليل خطوة بخطوة

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

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

ابدأ الدورة

مقدمة: لماذا لا تريد السلاسل النصية أن تُجمع؟

\n\n

كل مطور كتب بلغة PHP مرة واحدة على الأقل، واجه موقفًا يحصل فيه على نتيجة غريبة بدلاً من الرقم المتوقع. تحاول جمع متغيرين تم الحصول عليهما من نموذج أو قاعدة بيانات، ويظهر PHP شيئًا مثل 1520 بدلاً من 35. هل هذا مألوف؟ هذه مشكلة كلاسيكية: تحويل سلسلة نصية إلى رقم في PHP.

\n\n

PHP هي لغة ذات كتابة ديناميكية. هذه نعمة ونقمة في نفس الوقت. من ناحية، تحاول تخمين ما تعنيه وتحويل الأنواع تلقائيًا. ومن ناحية أخرى، غالبًا ما تؤدي هذه "التخمينات" إلى أخطاء يصعب اكتشافها. اليوم سنستعرض جميع طرق تحويل سلسلة نصية إلى رقم في PHP - من البسيط إلى المتقدم - ونتعلم كيفية القيام بذلك بشكل صحيح.

\n\n

إجابة سريعة: 4 طرق في 30 ثانية

\n\n

إذا كنت بحاجة إلى حل سريع - إليك ورقة الغش. لكن لا تتعجل في إغلاق المقالة: كل طريقة لها خصائصها ومزالقها.

\n\n
<?php\n// الطريقة 1: التحويل الصريح للنوع\n$number = (int) "42";          // int(42)\n$float  = (float) "3.14";     // float(3.14)\n\n// الطريقة 2: دالة intval()\n$number = intval("42");       // int(42)\n\n// الطريقة 3: دالة floatval() / doubleval()\n$float  = floatval("3.14");   // float(3.14)\n\n// الطريقة 4: باستخدام settype()\n$str = "42";\nsettype($str, "integer");     // الآن $str = int(42)\n?>
\n\n

جميع الطرق الأربعة تعمل، لكنها تتصرف بشكل مختلف في الحالات الحدودية. دعنا نستعرض كل واحدة بالتفصيل.

\n\n

1. التحويل الصريح للأنواع: (int) و (float)

\n\n

الطريقة الأسرع والأكثر وضوحًا لتحويل سلسلة نصية إلى رقم في PHP هي استخدام عوامل تحويل الأنواع. تعمل مثل "التبديل الإجباري" لنوع المتغير.

\n\n

أمثلة مع (int)

\n\n
<?php\necho (int) "42";           // 42\necho (int) "3.99";         // 3 (يتم تجاهل الجزء العشري!)\necho (int) "42 تفاحة";    // 42 (الرقم في البداية)\necho (int) "تفاحة 42";    // 0 (لا يمكن التعرف على الرقم)\necho (int) "";             // 0\necho (int) null;           // 0\n?>
\n\n

هام: يحاول PHP العثور على رقم في بداية السلسلة النصية. إذا بدأت السلسلة بحروف، ستكون النتيجة 0. غالبًا ما يكون هذا السلوك سببًا للأخطاء، خاصة عند التعامل مع إدخال المستخدم.

\n\n

أمثلة مع (float)

\n\n
<?php\necho (float) "3.14";       // 3.14\necho (float) "3,14";       // 3.0 (الفاصلة لا تعمل!)\necho (float) "2.99 يورو";  // 2.99\necho (float) "أبج";        // 0\n?>
\n\n

نصيحة: تذكر أن PHP تستخدم النقطة كفاصل عشري. إذا قام المستخدمون بإدخال أرقام بفاصلة (كما هو معتاد في بعض البلدان)، يجب أولاً استبدال الفاصلة بنقطة باستخدام str_replace(',', '.', $str).

\n\n

2. الدالتان intval() و floatval()

\n\n

هذه الدوال هي نسخة أكثر "ذكاءً" من التحويل الصريح. تفعل نفس الشيء، لكنها تسمح بتحديد نظام العد لـ intval().

\n\n
<?php\n// intval() — تحويل إلى عدد صحيح\necho intval("42");            // 42\necho intval("1010", 2);       // 10 (نظام ثنائي!)\necho intval("FF", 16);        // 255 (نظام سداسي عشري)\necho intval("42.99");         // 42 (يتم تجاهل الجزء العشري)\n\n// floatval() — تحويل إلى رقم عائم\necho floatval("3.14");        // 3.14\necho floatval("2.71828");     // 2.71828\n?>
\n\n

متى تستخدم: intval() لا غنى عنه إذا كنت تعمل مع أرقام في أنظمة عد مختلفة (مثل تحليل أكواد HEX للألوان). بالنسبة للأرقام العادية، لا يوجد فرق عمليًا عن (int).

\n\n

3. دالة settype(): تحويل في المكان

\n\n

على عكس الطرق السابقة، لا تُرجع settype() قيمة جديدة، بل تقوم

المدونات

توصيات الكتب