Если условие не работает с strpos

Я создал пользовательскую функцию OutputMessage, откуда я вставляю сообщение об ошибке с ее ClassStyle, как это Error: image upload failed!, а затем я взрываю строку и разделяю класс из нее, добавляя в div class, но моя функция не работает нормально.

function OutputMessage($Message=''){
    if($Message){
        $Postion = strpos($Message,":");
        if($Postion !== TRUE){
            return sprintf('<div class="alert alert-default">%s</div>',$Message); 
        }else{
            $Message = explode(": ",$Message);
            return sprintf('<div class="alert alert-%s">%s</div>',strtolower($Message[0]),$Message[1]); 
        }
    }else{
        return "";
    }
}

$Position проверка не работает, потому что я передаю сообщение с его классом, но он все еще возвращает класс по умолчанию


person Muhammad Hamza Nisar    schedule 04.01.2017    source источник
comment
Какой класс вы имеете в виду?   -  person Praveen Kumar Purushothaman    schedule 04.01.2017
comment
Класс Означает класс таблицы стилей, например опасность, успех. Я передаю такую ​​строку Danger: image upload failed!   -  person Muhammad Hamza Nisar    schedule 04.01.2017
comment
поэтому сначала он находит позицию строки :, если это правда, затем взрывает строку и возвращает сообщение   -  person Muhammad Hamza Nisar    schedule 04.01.2017
comment
Я также сталкивался с этой ситуацией несколько раз, но вместо этого я использовал (strcmp($str1, $str2)>0).. и все было в порядке   -  person M A SIDDIQUI    schedule 04.01.2017
comment
После этой строки $Message = explode(": ",$Message); добавьте var_dump($Message) и скажите, что получится?   -  person Praveen Kumar Purushothaman    schedule 04.01.2017
comment
на самом деле я должен проверить, найден ли он position :, поэтому запустите с custom class, иначе запустите класс по умолчанию   -  person Muhammad Hamza Nisar    schedule 04.01.2017
comment
Правильно я понимаю. Можете ли вы мне объяснить, каково значение приведенного выше кода? ^^^   -  person Praveen Kumar Purushothaman    schedule 04.01.2017
comment
приятель, это не будет следующим процессом, так что я могу var_dump он все еще застрял в первом процессе, возвращая это сообщение   -  person Muhammad Hamza Nisar    schedule 04.01.2017
comment
Это работа, теперь я нашел решение   -  person Muhammad Hamza Nisar    schedule 04.01.2017
comment
$position никогда не может быть логическим значением true. Это будет либо логическое значение false, либо целое число, указывающее, где начинается строка в стоге сена. используйте === FALSE вместо !== TRUE   -  person GordonM    schedule 04.01.2017


Ответы (6)


Из ручного ввода функции strpos():

Возвращает положение иглы относительно начала строки стога сена (независимо от смещения). Также обратите внимание, что позиции строки начинаются с 0, а не с 1.

Возвращает FALSE, если игла не найдена.

это означает, что if($Postion !== TRUE) всегда будет true, так как strpos() никогда не возвращает true.

Чтобы ваша функция работала должным образом, измените оператор if на if($Postion === false).

person Bartosz Zasada    schedule 04.01.2017

Почему вы не можете добиться такого....

function OutputMessage($Message = NULL){
    if(is_null($Message){
        return;
    }
    else {

        $arr = explode(":",$Message);
        if(count($arr)>0){
            return sprintf('<div class="alert alert-%s">%s</div>',strtolower($arr[0]),$arr[1]); 
        }

       else {
            return sprintf('<div class="alert alert-default">%s</div>',$Message); 
        }
    }
}
person Hikmat Sijapati    schedule 04.01.2017

Из документов strpos видно, что функция NEVER возвращает значение true. Просто измените его на false в операторе if, и все будет работать нормально.

person Vasil Shaddix    schedule 04.01.2017

Функция strpos() возвращает начальную позицию строки в виде целого числа или FALSE, если строка не существует. Следовательно, ваш оператор if else никогда не попадет в оператор else, поскольку $Position никогда не будет равен TRUE.

Поменяйте оператор if, чтобы проверить FALSE if($Position === FALSE), тогда вы сможете получить правильное поведение.

person SamBremner    schedule 04.01.2017

Вы можете использовать более 0 моментов TRUE

function OutputMessage($Message=''){
if($Message){
    $Postion = strpos($Message,":");
    if($Postion < 0){
        return sprintf('<div class="alert alert-default">%s</div>',$Message); 
    }else{
        $Message = explode(": ",$Message);
        return sprintf('<div class="alert alert-%s">%s</div>',strtolower($Message[0]),$Message[1]); 
    }
}else{
    return "";
}

}

person Mohd Waseem    schedule 04.01.2017

Попробуй этим добиться,

function OutputMessage($Message=''){
    if(is_null($Message) || $Message === ""){ return ""; }

    if(strpos($Message,":") === false){
       $result = sprintf('<div class="alert alert-default">%s</div>',$Message); 
    }else{
        $Message = explode(": ",$Message);
        $result = sprintf('<div class="alert alert-%s">%s</div>',strtolower($Message[0]),$Message[1]); 
    }
    return $result;
}
person Soni Vimalkumar    schedule 04.01.2017