una ultimo str_replace separar remove quitar parte eliminar caracter cadena php arrays

ultimo - strpos php



Función in_array insensible a mayúsculas y minúsculas de PHP (9)

¿Es posible hacer una comparación de mayúsculas y minúsculas al usar la función in_array ?

Entonces con una matriz fuente como esta:

$a= array( ''one'', ''two'', ''three'', ''four'' );

Las siguientes búsquedas serí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ían lo mismo? No creo que in_array sí mismo pueda hacer esto.


Escribí una función simple para verificar si hay un valor insensible en una matriz, el código está debajo.

función:

function in_array_insensitive($needle, $haystack) { $needle = strtolower($needle); foreach($haystack as $k => $v) { $haystack[$k] = strtolower($v); } return in_array($needle, $haystack); }

cómo utilizar:

$array = array(''one'', ''two'', ''three'', ''four''); var_dump(in_array_insensitive(''fOUr'', $array));


Lo anterior es correcto si suponemos que las matrices solo pueden contener cadenas, pero las matrices también pueden contener otras matrices. También 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 va a funcionar si $ haystack contiene otra arrays, pero dará como resultado "Advertencia PHP: strtolower () espera que el parámetro 1 sea string, array dado".

Ejemplo:

$needle = array(''p'', ''H''); $haystack = array(array(''p'', ''H''), ''U'');

Así que creé una clase de ayuda con los métodos relevantes, para hacer controles in_array () insensibles a mayúsculas y minúsculas (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:

class StringHelper { public static function toLower($string, $encoding = ''UTF-8'') { return mb_strtolower($string, $encoding); } /** * Digs into all levels of an array and converts all string values to lowercase */ public static function arrayToLower($array) { foreach ($array as &$value) { switch (true) { case is_string($value): $value = self::toLower($value); break; case is_array($value): $value = self::arrayToLower($value); break; } } return $array; } /** * Works like the built-in PHP in_array() function — Checks if a value exists in an array, but * gives the option to choose how the comparison is done - case-sensitive or case-insensitive */ public static function inArray($needle, $haystack, $case = ''case-sensitive'', $strict = false) { switch ($case) { default: case ''case-sensitive'': case ''cs'': return in_array($needle, $haystack, $strict); break; case ''case-insensitive'': case ''ci'': if (is_array($needle)) { return in_array(self::arrayToLower($needle), self::arrayToLower($haystack), $strict); } else { return in_array(self::toLower($needle), self::arrayToLower($haystack), $strict); } break; } } }


Lo más obvio es convertir el término de búsqueda a minúsculas:

if (in_array(strtolower($word), $a) { ...

por supuesto, si hay letras en mayúsculas en la matriz, tendrá que hacer esto primero:

$search_array = array_map(''strtolower'', $a);

y busca eso. No tiene sentido hacer strtolower en toda la matriz 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:

$search_array = array_combine(array_map(''strtolower'', $a), $a);

entonces

if ($search_array[strtolower($word)]) { ...

El único problema aquí es que las claves de matriz deben ser únicas, por lo que si tiene una colisión (por ejemplo, "Uno" y "uno") perderá todas menos una.


Supongamos que desea utilizar el comando in_array, así es cómo puede hacer que la búsqueda sea insensible.

Insensible a mayúsculas / minúsculas ():

foreach($searchKey as $key => $subkey) { if (in_array(strtolower($subkey), array_map("strtolower", $subarray))) { echo "found"; } }

Sensible a mayúsculas

foreach($searchKey as $key => $subkey) { if (in_array("$subkey", $subarray)) { echo "found"; } }


puedes usar preg_grep() :

$a= array( ''one'', ''two'', ''three'', ''four'' ); print_r( preg_grep( "/ONe/i" , $a ) );


$a = [1 => ''funny'', 3 => ''meshgaat'', 15 => ''obi'', 2 => ''OMER'']; $b = ''omer''; function checkArr($x,$array) { $arr = array_values($array); $arrlength = count($arr); $z = strtolower($x); for ($i = 0; $i < $arrlength; $i++) { if ($z == strtolower($arr[$i])) { echo "yes"; } } }; checkArr($b, $a);


function in_arrayi($needle, $haystack) { return in_array(strtolower($needle), array_map(''strtolower'', $haystack)); }

De la Documentation



  • in_array acepta estos parámetros: in_array (search, array, type)
  • si el parámetro de búsqueda es una cadena y el parámetro de tipo está establecido en VERDADERO, la búsqueda distingue entre mayúsculas y minúsculas.
  • así que para hacer que la búsqueda ignore el caso, sería suficiente usarlo así:

$ a = array (''uno'', ''dos'', ''tres'', ''cuatro'');

$ b = in_array (''ONE'', $ a, falso);