La forma estándar de PHP para probar si una cadena $str
termina con una subcadena $test
es:
$endsWith = substr( $str, -strlen( $test ) ) == $test
¿Es esta la forma más rápida?
php
string
performance
Jason Cohen
fuente
fuente
s($str)->endsWith($test)
os($str)->endsWithIgnoreCase($test)
útil, como se encuentra en esta biblioteca independiente .Respuestas:
Lo que Assaf dijo es correcto. Hay una función integrada en PHP para hacer exactamente eso.
Si
$test
es más largo que$str
PHP dará una advertencia, por lo que primero debe verificarlo.fuente
Este método es un poco más costoso para la memoria, pero es más rápido:
Esto es mejor cuando sabes exactamente qué es la aguja, para que puedas codificarla al revés. Si invierte la aguja mediante programación, se vuelve más lenta que el método anterior.
fuente
stripos
iterará toda la cuerda en el peor de los casos, mientrassubstr_compare
que comparará como máximo la longitud de la aguja. Sí,substr_compare
requiere calcular la longitud del pajar (y una aguja mucho más pequeña), pero este método requiere eso y copiarlo por completo, y posiblemente convertir todo en minúsculas para arrancar.substr_compare()
funciona muy bien.El desplazamiento negativo "comienza a contar desde el final de la cadena".
fuente
Aquí hay una manera simple de verificar si una cadena termina con otra, dando
strpos
un desplazamiento justo donde la cadena debe encontrarse:Directo, y creo que esto funcionará en PHP 4.
fuente
Depende de qué tipo de eficiencia le interese.
Su versión usa más memoria debido a la copia adicional del uso de substr.
Una versión alternativa podría buscar en la cadena original la última aparición de la subcadena sin hacer una copia, pero probablemente sería más lenta debido a más pruebas.
Probablemente la forma más eficiente es hacer un bucle char-by-char desde la posición -sterlen (prueba) hasta el final de la cadena y comparar. Esa es la cantidad mínima de comparaciones que puede esperar hacer y apenas se usa memoria adicional.
fuente
Otra forma sería usar la
strrpos
función :Pero eso no es más rápido.
fuente
Espero que la respuesta a continuación sea eficiente y también simple:
fuente
No sé si esto es rápido o no, pero para una prueba de un solo personaje, estos también funcionan:
fuente
La forma más fácil de verificarlo mediante expresiones regulares
por ejemplo para verificar si el correo proporcionado es gmail:
fuente
Estoy pensando que las funciones inversas como strrchr () te ayudarían a hacer coincidir el final de la cadena más rápido.
fuente
Esto es PHP puro, sin invocar funciones externas, excepto strlen .
fuente
para aguja de un solo carbón:
fuente