Los operadores de comparación < <= > >=
se pueden aplicar también para cadenas. Entonces, ¿por qué necesitamos una función especial para la comparación de cadenas: strcmp
?PHP: ¿Por qué necesitamos la función de comparación de cadenas?
Respuesta
Puesto que existen varias variantes:
dependiendo de la función, la respuesta a estas preguntas varían:
- Es mayúsculas y minúsculas? (
strcmp
vsstrcasecmp
,strnatcmp
vsstrnatcasecmp
) - Depende de la configuración regional? (
strcoll
hace) - ¿Puedo especificar una intercalación? (
strcoll
se ve afectada porsetlocale
)
Adicionalmente, los operadores de comparación también dan true
o false
. strcmp
proporciona un número entero para que pueda codificar simultáneamente si hay identidad (return 0) o, si no, cuál es más grande (dependiendo de si el valor es positivo o negativo).
¿Hay alguna diferencia con '===' sin embargo? –
Si ambos operandos son cadenas, y en el caso específico de 'strcmp', no creo que haya una diferencia, no. – Artefacto
@Peka Sí, ambos dependen de memcmp. Solo existe la diferencia de que uno devuelve verdadero/falso, el otro cualquier número entero. – Artefacto
Aunque no existen sobrecargas en PHP para strcmp, strcmp resultados en 3 valores diferentes -1 por menos de, 0 para iguales y +1 por mayor de la cadena en comparación. Con < = <= > >=
tendrá que (a veces) hacer comprobaciones múltiples una después de otra.
No devuelve solo -1, 1 y 0. – Artefacto
Y a menos que implemente algún tipo de tabla de búsqueda, también obtendrá dos comparaciones en el peor de los casos. – Artefacto
Erm, 'strcmp' se usa de la misma manera, excepto que toma el operador de comparación y lo aplica a' 0'. Entonces '$ a <$ b' se convierte en' strcmp ($ a, $ b) <0' - lo mismo ocurre con '==', '<=', '>' y '> ='. – Joey
- 1. Comparación de cadenas PHP usando '=='
- 2. Función de comparación segura de cadenas
- 3. PHP comparación de cadenas sin comillas
- 4. PHP: ¿Qué son construcciones idiomáticas y por qué las necesitamos?
- 5. ¿Es === en PHP binario-seguro en la comparación de cadenas?
- 6. ¿Por qué no funciona mi comparación de cadenas?
- 7. ¿Por qué necesitamos fibras
- 8. ¿Por qué necesitamos Thread.MemoryBarrier()?
- 9. Comparación de dos cadenas de fechas ISO8601 en PHP
- 10. La comparación de dos cadenas idénticas devuelve falso en PHP
- 11. Entero comparación de cadenas son iguales (error de PHP?)
- 12. ¿Por qué necesitamos marcos burlones?
- 13. ¿Por qué necesitamos web-sockets?
- 14. ¿Por qué necesitamos mesa virtual?
- 15. ¿Por qué necesitamos struct? (C#)
- 16. ¿Por qué mi comparación de cadenas de bash de dos cadenas idénticas siempre es falsa?
- 17. Comparación rápida de cadenas con la lista
- 18. ¿Por qué necesitamos C Unions?
- 19. ¿Por qué necesitamos ng-click?
- 20. ¿Por qué necesitamos usar Radix?
- 21. ¿Por qué necesitamos este operador especial ===?
- 22. Comparación de cadenas MySQL
- 23. ¿Por qué necesitamos parámetros de "salida"?
- 24. ¿Por qué necesitamos delegados de C#
- 25. ¿Por qué necesitamos patrones de diseño?
- 26. ¿Por qué la comparación de enteros es más rápida que la comparsión de cadenas?
- 27. ¿Por qué necesitamos funcall en Lisp?
- 28. Comparación de cadenas dobles usando la recursión
- 29. Técnica de comparación de cadenas utilizada por Python
- 30. ¿Por qué necesitamos ZooKeeper en la pila de Hadoop?
Habría supuesto que puede proporcionar un comparador o locale propio a esa función ... pero no, es solo la antigua y simple función de biblioteca C, aunque sea binariamente segura. Así que tal vez para facilitar la portación del código C a PHP ... ya que aparentemente ocurre todo el tiempo. – Joey