[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: stripos
sofuwa
stripos если ничего не найдено должна возвращать false и написано при проверке использовать ===

А у меня не срабатывает условие
$aaa = stripos($str, 'строка')
if ($aaa === false) {}


Если выводить $aaa то пустая строка, пробовал сравнивать с "" тоже не работает почему то. Строка реально не найдена.



Спустя 20 минут, 56 секунд (23.03.2014 - 16:16) mmsgold написал(а):
sofuwa, у меня тоже чет не работает,,, крутая функция,,, и не пойму почему обязательно использовать ===,,,,

Спустя 4 минуты, 27 секунд (23.03.2014 - 16:20) sofuwa написал(а):
Цитата (mmsgold @ 23.03.2014 - 13:16)
sofuwa, у меня тоже чет не работает,,, крутая функция,,, и не пойму почему обязательно использовать ===,,,,

я пробовал и == я как ток не пробовал.

Спустя 2 минуты, 50 секунд (23.03.2014 - 16:23) T1grOK написал(а):
Цитата (mmsgold @ 23.03.2014 - 13:16)
и не пойму почему обязательно использовать ===

Так понятней?
$aaa = stripos('ABC', 'A');
if ($aaa == false) {
echo 'Не найдено';
}

Спустя 10 минут, 13 секунд (23.03.2014 - 16:33) mmsgold написал(а):
T1grOK, а в каком случае эта функция отправит труъ

<?php
$findme = 'aBC';
$mystring1 = 'xyz';
$mystring2 = 'aBC';

$pos1 = stripos($mystring1, $findme);
$pos2 = stripos($mystring2, $findme);
if ($pos2 == false) {
echo "нетeq совпадение!";
}
?>

в данном случае выводит эхо

Спустя 1 минута (23.03.2014 - 16:34) Игорь_Vasinsky написал(а):
Цитата
$aaa = stripos('ABC', 'A');
if ($aaa == false) {
echo 'Не найдено';
}


из мануала

// Заметьте, что используется ===.  Использование == не даст верного 
// результата, так как 'a' в нулевой позиции.

if ($pos2 !== false) {
echo "Нашел '$findme' в '$mystring2' в позиции $pos2";
}


тип сравнивают с ===, а не с ==

спец. в описании этой функции есть абзац

Эта функция может возвращать как boolean FALSE, так и не-boolean значение, которое приводится к FALSE. За более подробной информацией обратитесь к разделу Булев тип. Используйте оператор === для проверки значения, возвращаемого этой функцией.

а у ТС, судя по сему , как и в пред. его топике - билиберда с кодировкой.

скорее всего у него юникод.

Спустя 6 минут, 24 секунды (23.03.2014 - 16:40) sofuwa написал(а):
-----------

Спустя 3 минуты, 16 секунд (23.03.2014 - 16:44) inpost написал(а):
sofuwa
Ответ же очевидный, в $str у тебя нет 'строка'.

Спустя 25 секунд (23.03.2014 - 16:44) Игорь_Vasinsky написал(а):
есть баг, о нём давно говорят и в том числе тут.

если сравнивать тип с false - глючит, нужно НЕ сравнивать с false, т.е.

if ($pos2 !== false) {
echo "Нашел '$findme' в '$mystring2' в позиции $pos2";
}

Спустя 3 минуты, 17 секунд (23.03.2014 - 16:47) inpost написал(а):
Игорь_Vasinsky
Первый раз слышу о баге. И на php.net не читал.

Спустя 2 минуты, 2 секунды (23.03.2014 - 16:49) mmsgold написал(а):
// результата, так как 'a' в нулевой позиции.

что это значит? в нулевой позиции,,, масив типа... а причем здесь строгий логический тип ===....
все сложное можно объяснить простым языком... кто то там сказал

Спустя 2 минуты, 26 секунд (23.03.2014 - 16:52) Игорь_Vasinsky написал(а):
Цитата
а причем здесь строгий логический тип ===....

Спустя 4 минуты, 7 секунд (23.03.2014 - 16:56) mmsgold написал(а):
Игорь_Vasinsky, пардон,,, чет я замудрил, тоесть все кроме 1 и true и "1"== true будет ложью,,, просто думал что раз есть символ значит уже не пусто и это в булеве логика (оказывается не так)

Спустя 2 минуты, 16 секунд (23.03.2014 - 16:58) Invis1ble написал(а):

Спустя 3 минуты, 1 секунда (23.03.2014 - 17:01) Игорь_Vasinsky написал(а):
mmsgold

фокус-покус

var_dump((bool)"1");//true
var_dump((bool)"0");//false

Спустя 1 час, 33 минуты, 45 секунд (23.03.2014 - 18:35) mvg написал(а):
В слов "строка" каждый символ по 2 байта потому, как русский алфавит в ASCII кодах содержит 2 байта. Тут и unicode и windows-1251 не будет найдена так как символ хранится в 2х байтах и соответственно stripos работая с однобайтовыми символами его определить не может и поэтому в помощь может прийти mb_stripos которая среди параметров содержит кодировку и которая сможет 2х байтный символ перевести в однобайтный согласно таблици кодировки символов или обработать 2х байтный символ.

По поводу тождественного сравнения написано в мануал:
Цитата
<?php
$findme    = 'a';
$mystring1 = 'xyz';
$mystring2 = 'ABC';

$pos1 = stripos($mystring1, $findme);
$pos2 = stripos($mystring2, $findme);

// Nope, 'a' is certainly not in 'xyz'
if ($pos1 === false) {
    echo "The string '$findme' was not found in the string '$mystring1'";
}

// Note our use of ===.  Simply == would not work as expected
// because the position of 'a' is the 0th (first) character.

if ($pos2 !== false) {
    echo "We found '$findme' in '$mystring2' at position $pos2";
}
?>


и в добавок:

    
$a = false;
$b = 0;

if ($a == $b)
{
echo "TRUE";
if ($a === $b)
echo "EQUALE";
}


Результат TRUE.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.