2010-07-15 4 views
9

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?

+2

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

Respuesta

13

Puesto que existen varias variantes:

dependiendo de la función, la respuesta a estas preguntas varían:

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).

+0

¿Hay alguna diferencia con '===' sin embargo? –

+0

Si ambos operandos son cadenas, y en el caso específico de 'strcmp', no creo que haya una diferencia, no. – Artefacto

+0

@Peka Sí, ambos dependen de memcmp. Solo existe la diferencia de que uno devuelve verdadero/falso, el otro cualquier número entero. – Artefacto

3

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.

+1

No devuelve solo -1, 1 y 0. – Artefacto

+0

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

+0

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

Cuestiones relacionadas