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

المعامل == يرجع True عند مقارنة نصين مختلفين في PHP؟

Emad Saif

السؤال

عندما حاولت مقارنة نصين مختلفين في 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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...