¿Es posible hacer una comparación entre mayúsculas y minúsculas al usar la in_array
función?
Entonces, con una matriz fuente como esta:
$a= array(
'one',
'two',
'three',
'four'
);
Las siguientes búsquedas volverían todas verdaderas:
in_array('one', $a);
in_array('two', $a);
in_array('ONE', $a);
in_array('fOUr', $a);
¿Qué función o conjunto de funciones haría lo mismo? No creo que in_array
pueda hacer esto.
count(preg_grep('/^'.preg_quote($needle).'/$',$a)>0)
. No tan elegante, entonces. (Observe que los caracteres ^ y $ son obligatorios, a menos que se desee una coincidencia parcial). Sin embargo, si realmente desea que se devuelvan las entradas coincidentes, me gusta esta solución.Lo obvio es simplemente convertir el término de búsqueda a minúsculas:
por supuesto, si hay letras mayúsculas en la matriz, primero deberá hacer esto:
y busca eso. No tiene sentido hacer
strtolower
todo el conjunto con cada búsqueda.Sin embargo, la búsqueda de matrices es lineal. Si tiene una matriz grande o va a hacer esto mucho, sería mejor poner los términos de búsqueda en la clave de la matriz, ya que este será un acceso mucho más rápido:
luego
El único problema aquí es que las claves de matriz deben ser únicas, por lo que si tiene una colisión (por ejemplo, "Una" y "una") perderá todas menos una.
fuente
De la documentación
fuente
>
a cada línea, funciona. Estoy acostumbrado a poner manualmente el>
en la primera línea.>
al comienzo de cada línea.Fuente: página del manual php.net in_array.
fuente
Supongamos que quiere usar el in_array, así es cómo puede hacer que el caso de búsqueda no sea sensible.
Mayúsculas y minúsculas en_array ():
Mayúsculas y minúsculas normales:
fuente
Lo anterior es correcto si suponemos que las matrices pueden contener solo cadenas, pero las matrices también pueden contener otras matrices. Además, la función in_array () puede aceptar una matriz para $ needle, por lo que strtolower ($ needle) no funcionará si $ needle es una matriz y array_map ('strtolower', $ haystack) no funcionará si $ haystack contiene otro matrices, pero dará como resultado "Advertencia de PHP: strtolower () espera que el parámetro 1 sea una cadena, matriz dada".
Ejemplo:
Así que creé una clase auxiliar con los métodos relevantes, para hacer comprobaciones in_array () sensibles a mayúsculas y minúsculas. También estoy usando mb_strtolower () en lugar de strtolower (), por lo que se pueden usar otras codificaciones. Aquí está el código:
fuente
Escribí una función simple para verificar un valor insensible en una matriz, el código está debajo.
función:
cómo utilizar:
fuente
fuente
return
. Cuando solo se necesita encontrar 1 de la aguja, no tiene sentido seguir iterando después de encontrarla. Sin embargo, corregiría un error tipográfico, hornearía el concepto $ estricto y realizaría algunos ajustes , tal vez algo cercano a 3v4l.org/WCTi2 . Esta publicación no es perfecta, pero su corazón está en el lugar correcto.fuente
$ a = array ('uno', 'dos', 'tres', 'cuatro');
$ b = en_array ('UNO', $ a, falso);
fuente
true
se utilizarán comparaciones de tipo estrictas, p'1' !== 1
. Ej . Cuandofalse
se utilizará el tipo malabarismo, p'1' == 1
. Ej . Consulte php.net/in_array y php.net/manual/en/types.comparisons.php para obtener documentación.