É possível fazer comparação sem distinção entre maiúsculas e minúsculas ao usar a in_array
função?
Portanto, com uma matriz de origem como esta:
$a= array(
'one',
'two',
'three',
'four'
);
As seguintes pesquisas retornariam verdadeiras:
in_array('one', $a);
in_array('two', $a);
in_array('ONE', $a);
in_array('fOUr', $a);
Que função ou conjunto de funções faria o mesmo? Eu não acho que in_array
ele próprio possa fazer isso.
count(preg_grep('/^'.preg_quote($needle).'/$',$a)>0)
. Não é tão elegante, então. (Observe que os caracteres ^ e $ são necessários, a menos que a correspondência parcial seja desejada.) No entanto, se você realmente deseja que as entradas correspondentes sejam retornadas, eu gosto desta solução.O óbvio é apenas converter o termo de pesquisa para minúsculo:
é claro que, se houver letras maiúsculas na matriz, você precisará fazer isso primeiro:
e procure isso. Não faz sentido fazer
strtolower
em toda a matriz a cada pesquisa.A pesquisa de matrizes, no entanto, é linear. Se você tem uma matriz grande ou vai fazer muito isso, seria melhor colocar os termos de pesquisa na chave da matriz, pois isso será um acesso muito mais rápido:
então
O único problema aqui é que as chaves do array devem ser únicas; portanto, se você tiver uma colisão (por exemplo, "Um" e "um"), perderá todos, exceto um.
fonte
Da documentação
fonte
>
a cada linha, ele funciona. Estou acostumado a colocar manualmente>
a primeira linha.>
no início de cada linha.Fonte: página de manual php.net in_array.
fonte
Digamos que você queira usar o in_array, eis como você pode tornar a pesquisa insensitiva.
In_array () que não diferencia maiúsculas de minúsculas:
Diferencia maiúsculas de minúsculas:
fonte
O exposto acima está correto se assumirmos que matrizes podem conter apenas cadeias, mas matrizes também podem conter outras matrizes. Também a função in_array () pode aceitar uma matriz para $ needle, portanto, strtolower ($ needle) não funcionará se $ needle for uma matriz e array_map ('strtolower', $ haystack) não funcionará se $ haystack contiver outras matrizes, mas resultará em "Aviso do PHP: strtolower () espera que o parâmetro 1 seja string, dado a matriz".
Exemplo:
Então, eu criei uma classe auxiliar com os métodos relevantes, para fazer verificações in_array () com diferenciação de maiúsculas e minúsculas. Também estou usando mb_strtolower () em vez de strtolower (), para que outras codificações possam ser usadas. Aqui está o código:
fonte
Eu escrevi uma função simples para verificar se há um valor insensível em uma matriz, o código está abaixo.
função:
Como usar:
fonte
fonte
return
. Quando é necessário encontrar apenas 1 da agulha, não faz sentido continuar iterando depois de encontrá-la. Eu consertava um erro de digitação, assava o conceito $ strict e fazia alguns refinamentos, talvez algo próximo a 3v4l.org/WCTi2 . Este post não é perfeito, mas seu coração está no lugar certo.fonte
$ a = array ('um', 'dois', 'três', 'quatro');
$ b = matriz_inicial ('ONE', $ a, false);
fonte
true
comparações estritas de tipo serão usadas, por exemplo'1' !== 1
. Quando ofalse
malabarismo de tipo será usado, por exemplo'1' == 1
. Veja php.net/in_array e php.net/manual/en/types.comparisons.php para obter documentação.