Buscar un valor en un array sin importar acentos o mayúsculas

Código PHP

PHP – Array – array_map, array_search, value

Función que nos indica si un array tiene un determinado valor, la comparación se realiza en minúsculas y es insensible a los acentos y carácteres especiales.

Utiliza la función array_walk y array_search para comprobar la clave con el valor.

/**
 * Class HelperArray
 */
abstract class HelperArray
{
    /**
     * Indica si un valor existe en un array.
     * Se comprueba que al parámetro sea un array.
     * Es independiente de maýusculas y minúsculas pero no acentuadas
     *
     * @param array $arr
     * @param mixed $value
     *
     * @return bool
     * @see strLower
     */
    public static function existsValue($arr, $value)
    {
        // Si no es un array, devolvemos false (No existe)
        if (!is_array($arr)) {
            return false;
        }

        $value = HelperString::toLower($value);
  
        // Como la función es sensitiva a mayúsculas y minúsculas
        // hacemos una copia de array poniendo las claves en minúsculas
        // la comparación se hace en minúsculas.
  
        $array_copy = array_map(function ($val)
        {
            return HelperString::toLower($val);
        }, $arr);

        return !(false === array_search($value, $array_copy));
    }
}

Funciones relacionadas

Ejemplos

$tmp    = [];
$existe = HelperArray::existsValue($tmp, null);
echo $existe; // false

$tmp    = 'ok';
$existe = HelperArray::existsValue($tmp, null);
echo $existe; // false

$existe = HelperArray::existsValue($tmp, 0);
echo $existe; // false

$tmp    = [1, 2, 3];
$existe = HelperArray::existsValue($tmp, '2');
echo $existe; // true

$tmp    = [1, 2, 3, '55' => 'cinco'];
$existe = HelperArray::existsValue($tmp, 3);
echo $existe; // true

$existe = HelperArray::existsValue($tmp, 55);
echo $existe; // false

$existe = HelperArray::existsValue($tmp, 'cinco');
echo $existe; // true

$tmp    = ['Primero' => 2, 'Segundo'];
$existe = HelperArray::existsValue($tmp, 'SEGUNDO');
echo $existe; // true

$tmp    = ['Primero', 'Segundo'];
$existe = HelperArray::existsValue($tmp, 'Segundo');
echo $existe; // true

$tmp    = ['Primero' => 11, 'Segundo' => 22];
$existe = HelperArray::existsValue($tmp, 'Segundo');
echo $existe; // false

$tmp    = ['Primero' => 11, 'Segundo' => 22, 'Último' => 99];
$existe = HelperArray::existsValue($tmp, 'ultimo');
echo $existe; // false

$tmp    = [11 => 'Primero', 22 => 'Segundo', 99 => 'Último'];
$existe = HelperArray::existsValue($tmp, 'ultimo');
echo $existe; // false

$tmp    = [11 => 'Primero', 22 => 'Segundo', 99 => 'Último'];
$existe = HelperArray::existsValue($tmp, 'último');
echo $existe; // true