PHP - проблема с mb_strlen - PullRequest
       0

PHP - проблема с mb_strlen

0 голосов
/ 12 марта 2011

Я бы хотел вставить «значение» в «массив», если длина строки больше 30. Итак, я сделал этот PHP-скрипт:

if(!mb_strlen($string, 'utf-8')<=30) array_push($array, "value");

Но это значение также увеличивается, если строка меньше 31 ... почему?

Ответы [ 5 ]

7 голосов
/ 12 марта 2011

Причина этого в том, что PHP обрабатывает ваших операторов.

Сначала он обрабатывает !mb_strlen($string, 'utf-8'), поэтому, если длина не равна нулю, возвращается true.

Затем он оценивает true <= 30, что всегда верно ...

Так что, по сути, единственный случай, когда ваше утверждение будет ложным, это если задана строка нулевой длины ...

См. Другие ответы о том, как написать заявление.

4 голосов
/ 12 марта 2011

Почему вы не пишете код в том виде, в котором его озвучили?

mb_strlen($string, 'utf-8') > 30

Причина, по которой ваше условие не выполняется, заключается в том, что ! имеет более высокий приоритет оператора , чем <=.Таким образом, !mb_strlen($string, 'utf-8') оценивается перед сравнением с 30, то есть:

(!mb_strlen($string, 'utf-8')) <= 30

И поскольку любое число, кроме 0, оценивается как true, когда преобразуется в логическое значение ,выражение !mb_strlen($string, 'utf-8') является только true для пустой строки.И поскольку <= требует, чтобы первый операнд был числовым, логический результат !mb_strlen($string, 'utf-8') преобразуется в целое число , где (int)true === 1 и (int)false === 0, и оба всегда меньше или равны 30.

1 голос
/ 12 марта 2011

Необходимо заключить тест в скобки:

if(!(mb_strlen($string, 'utf-8')<=30)) array_push($array, "value");
1 голос
/ 12 марта 2011

Вы делаете операторы неправильно <= 30, который меньше или равен 30, то есть все, что меньше, чем 31, вы должны использовать.

, чтобы исправить вашу ошибку, вы должны использовать оператор >чтобы показать, что левый аргумент должен быть больше, чем правый аргумент.

Если вы внимательно посмотрите на конструкцию символа, вы увидите, что левая сторона > открыта больше, чем правая сторона,(наоборот)

Следующие ссылки будут описывать различия:

вы также заметите, что в вашем операторе if есть восклицательный знак, который заставляет php преобразовать результат в bool до фактического запуска проверки длины.

поэтому вы всегда будете пытаться оценить true <= 30, вы должны удалить восклицательный знак.

Попробуйте переписать ваш код так:

if(mb_strlen($string, 'utf-8') > 30)
{
     array_push($array, "value")
}
1 голос
/ 12 марта 2011

Почему бы вам не использовать более простое условие if?

if (mb_strlen($string, 'utf-8') > 30) array_push($array, "value");

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...