PDA

View Full Version : یک مشکل ساده



kiapmc
پنج شنبه 23 فروردین 1403, 05:29 صبح
سلام دوستان

داشتم یک کدی مینوشتم یک مشکلی برخورد کردم


$X="rwaqs775";
if (stripos($X , "r"))
{ echo "hast";
}else{
echo "nist";
}
در این جواب nist رو برمیگردونه یعنی r نیست در متن وقتی r در اول متن بشه نمیخونه واسم سوال شد

ولی در این


$X="qrwaqs775";
if (stripos($X , "r"))
{ echo "hast";
}else{
echo "nist";
}

جواب hast است میگه در متن کلمه r هست

حالا سواله برام چرا اینطوریه

mazoolagh
پنج شنبه 23 فروردین 1403, 15:01 عصر
سلام و روز خوش

دلیلش به روش کار تابع stripos (https://www.php.net/stripos) برمیگرده:
این تابع اگر استرینگ مورد جستجو رو پیدا کنه موقعیت اون رو به صورت integer برمیگردونه،
ولی اگر پیدا نکنه bool با مقدار false برمیگردونه.

حالا وقتی موقعیت این عبارت مورد جستجو در شروع باشه تابع 0 برمیگردونه و در if مستقیما مقدار 0 رو چک کردین که false تفسیر میشه.
باید بلوک if رو به شکل زیر بنویسین:

$X = "rwaqs775";
if (stripos($X, "r") === false) {
echo "nist";
} else {
echo "hast";
};

==========
سعی کنین برای تاپیک عنوان مناسب و مرتبط با موضوع انتخاب کنین که در جستجو راحت پیدا بشه.

kiapmc
پنج شنبه 23 فروردین 1403, 17:58 عصر
سلام و روز خوش

دلیلش به روش کار تابع stripos (https://www.php.net/stripos) برمیگرده:
این تابع اگر استرینگ مورد جستجو رو پیدا کنه موقعیت اون رو به صورت integer برمیگردونه،
ولی اگر پیدا نکنه bool با مقدار false برمیگردونه.

حالا وقتی موقعیت این عبارت مورد جستجو در شروع باشه تابع 0 برمیگردونه و در if مستقیما مقدار 0 رو چک کردین که false تفسیر میشه.
باید بلوک if رو به شکل زیر بنویسین:

$X = "rwaqs775";
if (stripos($X, "r") === false) {
echo "nist";
} else {
echo "hast";
};



==========
سعی کنین برای تاپیک عنوان مناسب و مرتبط با موضوع انتخاب کنین که در جستجو راحت پیدا بشه.



حتما منون از راهنمائی شما

فقط فرق چیه ما به جای ===FALSE از ==!TRUE استفاده کنیم در کد بالا

فرق === با == چیه یا ===false با ==! true چیه در کل

همیشه برام سوال بود از لحاظ ساختاری بررسی میکنه درسته

mazoolagh
شنبه 25 فروردین 1403, 20:29 عصر
فرق چیه ما به جای false === از true ==! استفاده کنیم
در این مثال خاص قابل جایگزینی نیست!
دلیلش رو هم نوشتم که به روش پاسخ تابع stripos برمیگرده.
ولی در حالت کلی هر دو یک معنی میدن.


فرق === با == چیه در کل
وقتی با == دو مقدار رو مقایسه میکنین، فقط ارزش رو در نظر میگیره (و البته که خودش تغییر type میده)،
بنابراین هر کدوم از اینها: 123 یا 123.0 یا "123" یا "123.000" یا 123.0000 که با هم مقایسه بشن نتیجه اش true میشه.

ولی وقتی از === در مقایسه استفاده کنین type هم باید یکی باشه،
یعنی دیگه حتی نتیجه مقایسه 123 با 123.0 هم true نیست.

البته این مثال ساده ای هست که دو طرف number یا string بودن، و php هنگام مقایسه خودش string رو به number تغییر میده،
برای دونستن روش مقایسه انواع دیگه دیتا باید مستندات رو بخونین.