Menu

PHP array_search(): encontrar a chave de um valor

array_search($value, $array) retorna a chave do primeiro elemento igual a $value, ou false quando não há nenhum. Como a chave pode ser 0, sempre teste o resultado com !== false. Veja buscas estritas, como encontrar todas as correspondências, buscar num array multidimensional com array_column e buscas sem diferenciar maiúsculas.

Esta página tem editores executáveis - edite, execute e veja a saída na hora.

array_search($value, $array) retorna a chave do primeiro elemento igual a $value, ou false se nenhum elemento bate. Como uma chave encontrada pode ser 0, teste o resultado com !== false, como em if (($key = array_search('pear', $fruits)) !== false).

Se você só precisa de um sim ou não, o in_array() diz isso diretamente. O array_search() serve para quando você precisa saber onde o valor está, por exemplo para alterá-lo ou removê-lo.

A armadilha do 0 e do false

O bug mais comum do array_search(): o valor é o primeiro elemento, a chave dele é 0, e if ($key) trata 0 como falso. O código diz "não encontrado" para um valor que está bem ali. Compare com !== false, que só bate com um false de verdade.

!= false tem o mesmo bug que if ($key), porque 0 == false é true. Só o operador estrito distingue os dois.

Busca estrita

Como o in_array(), o array_search() compara com ==, a menos que você passe true como terceiro argumento. O modo frouxo deixa uma string encontrar um número e null encontrar 0, o que retorna uma chave inesperada.

Encontrar todas as chaves com um valor

O array_search() para na primeira correspondência. array_keys($array, $value) retorna todas as chaves que batem como um array; adicione true para uma comparação estrita. Um resultado vazio significa nenhuma correspondência, então não há confusão entre 0 e false.

Buscar num array multidimensional com array_column

O array_search() não olha dentro de arrays aninhados. Para uma lista de linhas, extraia o campo que você está buscando com array_column(); as posições nessa lista correspondem aos números das linhas, então o resultado é o índice da linha.

O array_column() renumera a saída a partir de 0, então isso só se alinha quando as linhas são numeradas 0, 1, 2 sem buracos. Depois de unset() ou array_filter() a numeração tem buracos; rode array_values() nas linhas antes ou use a consulta por chave das duas últimas linhas. O array_column() tem mais sobre a forma com chave de índice.

Busca sem diferenciar maiúsculas

O array_search() compara strings com exatidão. Deixe os dois lados em minúsculas para ignorar a diferença. O array_map() mantém as chaves, então a chave que você recebe de volta é a chave do array original.

Buscar e substituir ou remover

O motivo comum para buscar é agir sobre o elemento encontrado. Com a chave em mãos, atribua para alterá-lo ou use unset() para removê-lo, e sempre proteja antes com !== false: unset($arr[false]) remove em silêncio o elemento com a chave 0.

Perguntas frequentes

O que o array_search retorna se o valor não for encontrado?

false. Quando o valor é encontrado, ele retorna a chave, que pode ser 0 ou uma string vazia, então verifique o resultado com !== false, nunca com if ($key) ou != false.

Por que minha verificação com array_search falha no primeiro elemento?

O primeiro elemento de um array indexado tem a chave 0, e 0 é falso. Por isso if (array_search('a', ['a', 'b'])) cai no ramo de não encontrado. Escreva if (array_search('a', $arr) !== false).

Como encontro todas as chaves de um valor no PHP?

O array_search() para na primeira correspondência. array_keys($array, $value, true) retorna todas as chaves cujo valor bate, como um array (vazio quando não há nenhuma).

Como busco num array multidimensional no PHP?

Extraia o campo para uma lista simples e busque nela: $i = array_search('ada@example.com', array_column($users, 'email'));, e depois leia a linha como $users[$i]. Isso funciona quando as linhas são numeradas 0, 1, 2; caso contrário, percorra com foreach.

Ilustração das linguagens de programação do Coddy

Aprenda a programar com o Coddy

COMEÇAR