Eu tenho uma matriz associativa e preciso encontrar a posição numérica de uma tecla. Eu poderia percorrer manualmente a matriz para encontrá-lo, mas existe uma maneira melhor de incorporar o PHP?
$a = array(
'blue' => 'nice',
'car' => 'fast',
'number' => 'none'
);
// echo (find numeric index of $a['car']); // output: 1
array("val1", "val2", "car" => "val3")
que irá produzir0
, o que é errado ...http://php.net/manual/en/function.array-keys.php
fonte
fonte
fonte
Embora a resposta de Fosco não esteja errada, há um caso a ser considerado com este: matrizes mistas. Imagine que eu tenho uma matriz como esta:
Agora, o PHP permite esse tipo de sintaxe, mas há um problema: se eu executo o código do Fosco, entendo o
0
que está errado para mim, mas por que isso acontece?Porque, ao fazer comparações entre seqüências de caracteres e números inteiros, o PHP converte as seqüências em números inteiros (e isso é meio estúpido na minha opinião), então, quando
array_search()
o índice é pesquisado, ele pára no primeiro porque, aparentemente,("car" == 0)
é verdade .Definir
array_search()
o modo estrito não resolverá o problema, poisarray_search("0", array_keys($a))
retornaria false, mesmo que exista um elemento com o índice 0.Portanto, minha solução apenas converte todos os índices de
array_keys()
para strings e os compara corretamente:Imprime
1
, o que está correto.EDIT:
Como Shaun apontou no comentário abaixo, o mesmo se aplica ao valor do índice, se você procurar um índice int como este:
Você sempre terá
0
, o que está errado, então a solução seria converter o índice (se você usar uma variável) em uma string como esta:fonte
var_dump(array_search(0, array_map("strval", array_keys($a))));
sempre produziráint (0)
, em vez debool (false)
.uma solução que eu encontrei ... provavelmente bastante ineficiente em comparação com a solução de Fosco:
fonte
array_search
, o que faz uma espécie primeiro e, portanto, dolorosamente lento.Todas as soluções baseadas em array_keys não funcionam para matrizes mistas. A solução é simples:
Do php.net: Se o terceiro parâmetro strict for definido como TRUE, a função array_search () procurará elementos idênticos no palheiro. Isso significa que ele também fará uma comparação estrita do tipo da agulha no palheiro, e os objetos devem ter a mesma instância.
fonte