Перейти к содержимому

Как узнать длину строки php

  • автор:

Как узнать длину строки php

На этом шаге мы рассмотрим функцию, вычисляющую длину строки .

На практике очень часто требуется узнать длину строки. Для этого в РНР имеется специальная функция strlen() , принимающая в качестве входных параметров строку и возвращающая ее длину виде целого числа.

Ее общий вид следующий:

Рис.1. Общий вид функции strlen()

// длина строки for ($i=0; $i// посимвольный вывод строки "; > ?>

Текст этой программы можно взять здесь.

Результат выполнения этой программы смотрите на рисунке 2.

Рис.2. Пример посимвольного вывода строки

Первое, что бросается в глаза — это присутствие квадратных скобок, так, как они использовались при работе с массивами. Здесь нет ничего странного, так как в РНР , как и во многих других языках программирования, строку можно воспринимать как массив символов, проиндексированный целыми числами, начиная с нуля.

Вернемся к нашему примеру. Сначала мы инициализируем строку, затем с помощью функции strlen() получаем ее длину в виде целочисленного значения, которое запишем в переменную $len . Далее создаем простой цикл for на $len итераций. У многих начинающих программистов часто возникает соблазн не использовать дополнительную переменную для хранения длины строки. Действительно, функцию strlen() можно записать прямо в определении цикла for . Например:

for ($i=0;$i.

Тем не менее, категорически не рекомендуется так делать. Во-первых, этот код работает медленнее, чем с использованием дополнительной переменной, так как приходится постоянно вызывать функцию strlen() . Во-вторых, длина строки может меняться в теле цикла, соответственно, поменяется количество итераций, что может повлиять на ход программы.

В теле цикла нашей программы мы выводим один символ и выполняем перевод строки. Еще раз хочется обратить ваше внимание, что нумерация символов происходит с нуля.

На следующем шаге мы рассмотрим функции, позволяющие сравнивать строки .

iconv_strlen

В отличие от strlen() , iconv_strlen() учитывает кодировку строки. Длина string не обязательно будет соответствовать количеству байт в ней, так как в различных кодировках различные символы кодируются различным количеством байт, например, юникод может быть и двух-, и четырёхбайтным.

Список параметров

Если параметр encoding опущен, предполагается, что кодировка строки string эквивалентна значению iconv.internal_encoding.

Возвращаемые значения

Возвращает количество символов в string как целое число или false в случае возникновения ошибки при кодировании.

Список изменений

Версия Описание
8.0.0 encoding теперь допускает значение null.

Смотрите также

  • grapheme_strlen() — Получает длину строки в единицах графемы
  • mb_strlen() — Получает длину строки
  • strlen() — Возвращает длину строки

User Contributed Notes 2 notes

17 years ago

If iconv_strlen is passed a UTF-8 string containing badly formed sequences, it will return FALSE. This is in contrast to mb_strlen of the behaviour of utf8_decode, which strip out any bad sequences;

# UTF-8 string containing bad sequence: \xe9
$str = «I?t?rn?ti?n\xe9?liz?ti?n» ;

print «mb_strlen: » . mb_strlen ( $str , ‘UTF-8’ ). «\n» ;
print «strlen/utf8_decode: » . strlen ( utf8_decode ( $str )). «\n» ;
print «iconv_strlen: » . iconv_strlen ( $str , ‘UTF-8’ ). «\n» ;
?>

Displays;

mb_strlen: 20
strlen/utf8_decode: 20
iconv_strlen:

As such it is being «stricter» than mb_strlen and it may mean you need to check for invalid sequences first. A quick way to check is to exploit the behaviour of the PCRE extension (see notes on pattern modifiers);

if ( preg_match ( ‘/^./us’ , $str , $ar ) != 1 ) die( «string contains invalid UTF-8» );
>
?>

A slower but stricter check (regex) can be found at: http://www.w3.org/International/questions/qa-forms-utf-8

Similiar applies to iconv_substr, iconv_strpos and iconv_strrpos

3 years ago

Notice there is a disconnect:
>If charset`parameter is omitted, str is assumed to be encoded in iconv.internal_encoding.

But clicking on the iconv.internal_encoding link (https://www.php.net/manual/en/iconv.configuration.php), the docs indicate that iconv.internal_encoding is deprecated since 5.6.

  • Функции iconv
    • iconv_​get_​encoding
    • iconv_​mime_​decode_​headers
    • iconv_​mime_​decode
    • iconv_​mime_​encode
    • iconv_​set_​encoding
    • iconv_​strlen
    • iconv_​strpos
    • iconv_​strrpos
    • iconv_​substr
    • iconv
    • ob_​iconv_​handler
    • Copyright © 2001-2024 The PHP Group
    • My PHP.net
    • Contact
    • Other PHP.net sites
    • Privacy policy

    Как найти длину строки в PHP?

    В этой статье мы рассмотрим, как в PHP вычисляется длина строки. Поговорим про известную функцию strlen и расскажем про нюансы её работы.

    Итак, начнём с того, что заключим нужный текст в переменную — это позволит нам в последующем удобнее обращаться к нашей текстовой информации. К примеру:

     
    $x = "Я учусь в OTUS";

    Будем считать, что строка у нас есть, поэтому осталось определить её длину. Сделать это можно, используя всем известную функцию strlen. Единственным и обязательным параметром данной функции является строка, число символов в которой мы считаем:

     
    strlen ($x);

    Функция работает предельно просто: принимает строку и возвращает в качестве результата определённое значение, которое, кстати, вы потом сможете применять в своих скриптах и функциях. При этом удобнее будет сделать так:

     
    $xlength = strlen($x);

    Таким образом мы записали в переменную xlength длину строки $x. Когда же надо вывести длину строки на экран, воспользуйтесь хорошо известным echo:

     
    echo $xlength;

    Но это в том случае, если мы уже создали данную переменную, иначе можно записать код следующим образом:

     
    echo strlen ($x);

    То есть ничего сложного, как видите, нет. Если же говорить о том, где в реальной практике может использоваться нахождение длины строки, то это, например, поле для ввода какого-нибудь текста, позволяющее определить размер статьи в режиме онлайн.

    Каковы нюансы в работе функции strlen?

    Следует учитывать, что функция вычисляет количество байт в строке string, а не привычное нам число символов. И тут всё зависит от кодировки:

    В нашем случае русские буквы в юникоде занимают 2 байта, в результате чего длина одной буквы становится равной двум: 11 букв * 2 + 3 пробела = 25. Это важная особенность.

    Кроме того, если в измеряемой нами строке символы отсутствуют, функция вернет значение 0. Также не стоит использовать strlen для расчёта длины массива, т. к. вернётся NULL.

    Ещё существует функция iconv_strlen, позволяющая нам в качестве второго параметра указывать кодировку:

     
    $x = iconv_strlen('строка нашего текста', 'UTF-8');

    Как посчитать число слов в строке? Необходимость в этом тоже иногда возникает. В PHP для выполнения данной задачи есть функция str_word_count. Она имеет 2 основных параметра, которые обязательны. Первый — сама строка, число слов в которой нас интересует. Второй — формат, в котором будет выведено значение. Возможно использование и третьего параметра — charlist, в котором можно указывать список дополнительных символов, которые функция посчитает как слова. Но этот параметр необязателен, к тому же, обычно в таких излишествах нет надобности.

    Что касается параметра format, то он способен принимать три значения: — 0 — просто возвращается количество найденных слов; — 1 — массив слов, входящих в строку; — 2 — массив со словами, причём индекс каждого слова — это его позиция в строке.

     
    $x = "строка нашего текста"; str_word_count($x, 0);

    Используем strlen и конструкцию if else

    В некоторых задачах на PHP нужно определить, превышает ли длина нашей строки какой-нибудь предел, например, десять. Такие задачки решаются через конструкцию if else:

     
     10) < echo "В вашей строке больше 10 символов."; >elseif ($count == 10) < echo "В вашей строке ровно 10 символов."; >else < echo "В вашей строке меньше 10 символов."; >?>

    Пожалуй, на этом всё, успешного вам обучения!

    Интересуют продвинутые знания по PHP? Добро пожаловать на специализированный курс.

    grapheme_strlen

    Строка, которую необходимо измерить. Должна быть корректная строка в кодировке UTF-8.

    Возвращаемые значения

    Длина строки в случае успешного выполнения или false в случае возникновения ошибки.

    Примеры

    Пример #1 Пример использования grapheme_strlen()

    $char_a_ring_nfd = "a\xCC\x8A" ; // 'LATIN SMALL LETTER A WITH RING ABOVE' (U+00E5) normalization form "D"
    $char_o_diaeresis_nfd = "o\xCC\x88" ; // 'LATIN SMALL LETTER O WITH DIAERESIS' (U+00F6) normalization form "D"

    print grapheme_strlen ( 'abc' . $char_a_ring_nfd . $char_o_diaeresis_nfd . $char_a_ring_nfd );

    Результат выполнения этого примера:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *