اذهب إلى المحتوى

السؤال

نشر

عندما حاولت مقارنة نصين مختلفين في PHP بإستخدام عامل المساواة == وجد أنه يُعيد True:

<?php

echo '1e3' == '1000';	// True

لماذا يحدث هذا الأمر؟ هنا نقارن بين نصين مختلفين تمامًا، لكن رغم ذلك يتم إعادة True ، أعمل أن 1000 تساوي 1e3 رياضيًا، لكن هنا "1000" (نص String) وليس رقم!

لماذا لا يتم إعادة False في هذه الحالة؟

Recommended Posts

  • 1
نشر

لا يجب أن تستخدم المعامل == عند المقارنة في PHP خصوصًا عند مقارنة النصوص حيث ستحصل على نتيجة مختلفة عما تتوقعه، فعلى سبيل المثال كل العمليات التالية سوف تُعيد True:

<?php

echo "hi" == 0;	// True	
echo 1 == '1';	// True
echo '80000' == '8e4';	// True

وذلك لأن PHP تقوم بتحويل أنواع القيم، ومن الأفضل إستخدام المعامل === بدلًا من == عند المقارنة بين قيمتين:

<?php

echo "hi" === 0;	// False
echo 1 === '1';		// False
echo '80000' === '8e4';	// False

 

  • 1
نشر

أعتقد أن هذا تدوين علمي يستخدم للأرقام

1000 = 10 ^ 3 = 1 * 10 ^ 3 = 1 e3

وبعد بعض التجارب والخطأ أعتقد أن هذا صحيح جرب هذا 

100 == 1e2
300 == 3e2
5000 == 5e3

فإن الأرقام بعد "e" تعني عدد الموضع في الأعداد العشرية الفاصلة العشرية (تلك "النقطة" في الرقم) التي تم نقلها ... ... يعني e3 أنك تضرب الجزء قبل "e" و 1000 (ثلاثة الأصفار ~ ثلاثة مواضع في رقم عشري)

  • 1
نشر

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

<?php
$str1 = "Hello";
$str2 = "Hello";
echo strcmp($str1, $str2); // Outputs: 0

$str1 = "Hello";
$str2 = "Hello World";
echo strcmp($str1, $str2); // Outputs: -6

?>

وإن أردت المقارنة بدون حساسية لحالة الأحرف أي A = a نستخدم الدالة strcasecmp

حيث أنه بالرفم من اختلاف حالة الأحرف Oo Hh ستعيد لنا الدالة أن السلسلتين متطابقتين.

<?php
echo strcasecmp("Hello world!","HELLO WORLD!");   // output 0
?>

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...