[PHP] Comprimento da string, da maneira certa

O título pode parecer muito comum e básico, porque sabe-se que você pode usar a função strlen para obter o comprimento da string, mas na verdade não é tão simples, há muitas coisas que você deve manter em mente ao trabalhar com o comprimento das strings, então vamos entre neste guia.

A maneira fácil e comum

Esta é a maneira que a maioria de nós conhece, e muitos programadores simplesmente a usam o tempo todo

$string = 'Hello';
echo strlen
($string);

O que esse trecho de código irá gerar?

Isso irá imprimir 5 com certeza, porque a palavra ‘Hello’ consiste em 5 letras. Bom o suficiente, vamos dar outro exemplo da língua alemã.

$string = 'Tschüss';
echo strlen
($string);

O que esse trecho de código irá gerar?
Isso deve resultar em 7, porque a palavra ‘Tschüss’ consiste em 7 letras, mas ei, é assim que os humanos contam, mas não na programação, na verdade ‘Tschüss’ consiste em 8 letras e este trecho produzirá 8 e não
7. Você pode tentar

Por que isso aconteceu?
na verdade, strlen () não conta letras, mas conta bytes, a letra ‘ü’ é uma letra Unicode e as letras Unicode não têm 1 byte o tempo todo, mas são 1 ~ 6 bytes. e ‘ü’ tem 2 bytes, então o PHP contou como 2 letras.

Nota: Não há uma resposta simples sobre as letras de 1 a 6 bytes, então não vamos nos aprofundar nisso agora, talvez outro tutorial.

O caminho certo

bem, se você tiver certeza de que a string não terá nenhuma letra Unicode ou se realmente quiser contar os bytes e não as letras, então strlen () ficará bem. Mas se você quiser contar letras e não tiver certeza se haverá letras Unicode, usaremos outra função que é <a href = ” http://php.net/manual/en/function.mb-strlen .php “> mb_strlen </a> como segue:

$string = 'Tschüss';
echo mb_strlen
($string, 'utf8');

O primeiro parâmetro é a string que você deseja contar e o segundo é a codificação. Agora, isso vai gerar 7 como esperávamos.

Comparar comprimento da corda

E se tivermos uma string e quisermos verificar se ela é menor ou igual a 5?
A primeira coisa a ter em mente é fazer isso:

$string = 'This is some string';

if(strlen($string) <= 5)
{
//$string is less than or equal to 5
}

Bem, isso vai funcionar e é um código muito bom, mas não perfeito.
Isso não é perfeito para desempenho, há uma maneira melhor de fazer isso usando isset em vez de strlen.

$string = 'This is some string';
if(!isset($string[5]))
{
////$string is less than or equal to 5
}

Isto pode parecer estranho à primeira vista, mas quando você trata uma string como array, então a chave que você está tentando acessar é a posição char, então para este exemplo $ string [5] é o caractere que na posição 5 que ‘i’ (php é 0 líder, então a posição 5 é a 6ª letra).

Mas por que assim é melhor? Porque isset é uma construção de linguagem e strlen é uma função, e em geral as chamadas de função são caras do que as construções de linguagem. por isso faz um melhor desempenho.

Adicione suas perguntas como comentário, se tiver alguma, Goodluck 🙂