Buscar una clave en un array sin importar acentos o mayúsculas

Código PHP

PHP – Array – array_map, array_search, key

Función que nos indica si un array tiene una determinda clave, 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 una clave existe en un array.
     * Se comprueba que al parámetro sea un array.
     * Es independiente de maýusculas, minúsculas y acentuadas
     *
     * @param array $arr
     * @param mixed $key
     *
     * @return bool
     */
    public static function existsKey( $arr, $key )
    {
        // Si no es un array, devolvemos false (No existe)
        if (!is_array($arr)) {
            return false;
        }
  
        $key = HelperString::eliminarAcentos( $key );
        $key = HelperString::toLower( $key );
        
        // Como la función array_key_exists es sensitiva 
        // a mayúsculas y minúsculas
        // hacemos una copia de array poniendo las 
        // claves en minúsculas
  
        $array_copy = array_map(function ($val)
        {
            $val = HelperString::eliminarAcentos($val);

            return HelperString::toLower($val);

        }, array_keys($arr));

        return (array_search($key, $array_copy) > 0);
    }

}

Funciones relacionadas

Ejemplos

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

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

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

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

$tmp    = [1, 2, 3, '55' => 'cinco'];
$existe = HelperArray::existsKey($tmp, 3);
echo $existe; // false
// no existela clave 3 porque el array es equivalente a [ 0 => 1, 1 => 2,  2 => 3, '55' => 'cinco'];

$existe = HelperArray::existsKey($tmp, '55');
echo $existe; // true

$existe = HelperArray::existsKey($tmp, 55);
echo $existe; // true

$existe = HelperArray::existsKey($tmp, 'cinco');
echo $existe; // false

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

$tmp    = ['Primero', 'Segundo'];
$existe = HelperArray::existsKey($tmp, 'Segundo');
echo $existe; // false. [0 => 'Primero', 1 = 'Segundo']

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

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

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

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