A maneira padrão do PHP de testar se uma string $str
termina com uma substring $test
é:
$endsWith = substr( $str, -strlen( $test ) ) == $test
Esta é a maneira mais rápida?
php
string
performance
Jason Cohen
fonte
fonte
s($str)->endsWith($test)
ous($str)->endsWithIgnoreCase($test)
útil, conforme encontrado nesta biblioteca autônoma .Respostas:
O que Assaf disse está correto. Existe uma função integrada no PHP para fazer exatamente isso.
Se
$test
for mais longo do que o$str
PHP emitirá um aviso, você deve verificar isso primeiro.fonte
Esse método é um pouco mais caro em termos de memória, mas é mais rápido:
É melhor quando você sabe exatamente o que é a agulha, para codificá-la invertida. Se você inverter a agulha programaticamente, ela se tornará mais lenta que o método anterior.
fonte
stripos
iterará toda a corda no pior caso, enquantosubstr_compare
comparará no máximo o comprimento da agulha. Sim,substr_compare
requer o cálculo do comprimento do palheiro (e uma agulha muito menor), mas esse método exige isso e a cópia completa, e possivelmente a conversão de toda a coisa em minúscula para a inicialização.substr_compare()
funciona muito bem.O deslocamento negativo "começa a contar a partir do final da string".
fonte
Aqui está uma maneira simples de verificar se uma string termina com outra, fornecendo
strpos
um deslocamento exatamente onde a string deve ser encontrada:Simples, e acho que isso funcionará no PHP 4.
fonte
Depende de qual tipo de eficiência você se importa.
Sua versão usa mais memória devido à cópia extra do uso de substr.
Uma versão alternativa pode pesquisar a sequência original pela última ocorrência da substring sem fazer uma cópia, mas provavelmente seria mais lenta devido a mais testes.
Provavelmente, a maneira mais eficiente é fazer loop char a char da posição -sterlen (test) até o final da string e comparar. Essa é a quantidade mínima de comparações que você pode esperar fazer e quase não há memória extra usada.
fonte
Outra maneira seria usar a
strrpos
função :Mas isso não é mais rápido.
fonte
Espero que a resposta abaixo seja eficiente e também simples:
fonte
Não sei se isso é rápido ou não, mas para um teste de um único caractere, eles também funcionam:
fonte
maneira mais fácil de verificá-lo através de expressões regulares
por exemplo, para verificar se o email fornecido é gmail:
fonte
Eu estou pensando que as funções reversas como strrchr () ajudariam você a combinar o final da string o mais rápido.
fonte
Isso é puro PHP, sem chamar funções externas, exceto strlen .
fonte
para agulha single-char:
fonte