السلام عليكم... جماعة هو لي في الصورة الأولي طلع Not found وفي تاني صورة طلع 0 مع انهم نفس بعض
Problem
دالة strpos تبحث عن أول ظهور لسلسلة نصية في سلسلة نصية أخرى، وفي حال تم العثور على السلسلة، فإنها تعيد الموقع الذي تم العثور عليه (يبدأ من 0)، وإذا لم يتم العثور على الحرف، فإنها تعيد false.
الفرق بين الكودين هو في كيفية فحص إذا ما كان تم العثور على الحرف أم لا.
في الكود الأول:
الشرط يتحقق إذا كان $position غير صفر أو false من خلال الجملة if، وإن كان $position هو 0 (الموقع الذي تم العثور عليه)، فإن الشرط يعتبر صحيحًا ويتم عرض 0.
بمعنى أن 0 في البرمجة تعتبر false أيضًا وبالتالي لن يتم تنفيذ الكود في في الجملة if وسيتم تنفيذه في else، لذلك عليك تعديل الشرط ليصبح كالتالي:
<?php $str = 'To do or not to do'; $position = strpos($str, 'To'); if ($position === 0 || $position) { echo $position; } else { echo 'Not found'; }
لكن من الأفضل استخدام طريقة الكود الثاني.
ففي الكود الثاني:
يتم فحص بشكل صارم مع !== للتأكد من أن $position ليس false بشكل كامل أي المقارنة مع false فقط، وبالتالي في حال كان $position هو 0 سيتم طباعة القيمة، والشرط لن يعتبر كاذبًا، وبالتالي يتم عرض 0.
أي تقع السلسلة To في السلسلة النصية؟ في البداية صحيح في الموضع 0.
إذن سيعود بقيمة 0، وقيمة 0 هي قيمة كاذبة falsy في لغات البرمجة، لذلك لن يتم تنفيذ الكود في الجملة if لأنه يتم تنفيذها فقط في حال كان الشرط يحقق true هنا:
if ($position) { echo $position; } else { echo 'Not found'; }
بينما في الكود الثاني وضعنا في الجملة الشرطية، شرط يتحقق مما إذا كانت القيمة العائدة هي False وهي ليست كذلك بل 0 لذلك يعتبر الشرط true وسيتم تنفيذ الكود والطباعة هنا:
if ($position !== false) { echo $position; // 0 } else { echo 'Not found'; }
ستحتاج إلى قراءة المقال التالي لفهم الأمر:
التعليقات