W3docs

in_array()

Aprenda como a função in_array() do PHP verifica se um valor existe em um array, como funciona a comparação frouxa vs. estrita e as armadilhas de tipos a evitar.

O que in_array() faz

in_array() verifica se um determinado valor existe em algum lugar de um array e retorna um boolean: true se o valor for encontrado, false caso contrário. Ela pesquisa os valores do array (não as chaves), o que a torna a função ideal para perguntas como "essa opção é permitida?" ou "esse usuário já foi adicionado à lista?".

Esta página aborda a assinatura da função, como a comparação frouxa vs. estrita altera o resultado, as armadilhas de manipulação de tipos que confundem as pessoas e quando usar uma função diferente.

Sintaxe

in_array(mixed $needle, array $haystack, bool $strict = false): bool
ParâmetroDescrição
$needleO valor a ser procurado.
$haystackO array em que se realiza a busca.
$strictQuando true, os tipos também devem corresponder (usa === em vez de ==). O padrão é false.

A função retorna true se $needle for encontrado em $haystack, caso contrário false.

Exemplo básico

<?php

$fruits = ["apple", "banana", "orange"];

if (in_array("banana", $fruits)) {
    echo "Found!";
} else {
    echo "Not found.";
}
// Output: Found!

in_array() é sensível a maiúsculas e minúsculas para strings — "Apple" não corresponderia a "apple":

php— editable, runs on the server

Comparação frouxa vs. estrita

Por padrão, in_array() usa comparação frouxa (==), portanto valores de tipos diferentes podem corresponder. Passe true como terceiro argumento para exigir correspondência exata de tipo (===):

<?php

$numbers = [1, 2, 3, 4];

// Loose: the string "1" equals the integer 1
var_dump(in_array("1", $numbers));        // bool(true)

// Strict: "1" (string) is not identical to 1 (int)
var_dump(in_array("1", $numbers, true));  // bool(false)

Use o modo estrito sempre que seu array misturar tipos, ou quando corresponder ao tipo errado seria um bug — por exemplo, ao verificar um ID fornecido pelo usuário em relação a uma lista de IDs inteiros.

A armadilha de manipulação de tipos

A comparação frouxa pode produzir resultados surpreendentes. Um exemplo clássico pesquisa uma string vazia ou 0 em uma lista de strings:

<?php

$values = [0, "", "foo", "bar"];

var_dump(in_array("0", $values));       // bool(true)  — "0" == 0
var_dump(in_array("0", $values, true)); // bool(false) — different types

Aqui, "0" (string) é frouxamente igual ao inteiro 0 já presente no array, portanto a busca frouxa retorna true. O modo estrito elimina a ambiguidade.

Nota: O PHP 8 alterou a forma como strings e números são comparados. No PHP 7, in_array(0, ["foo", "bar"]) retornava true porque "foo" era convertido para 0. No PHP 8+, a mesma chamada retorna false. Em caso de dúvida, passe $strict = true.

Obtendo a posição em vez de true/false

in_array() apenas indica se um valor existe. Se você também precisar da sua chave, use array_search() — ela retorna a chave em caso de sucesso e false em caso de falha:

<?php

$fruits = ["apple", "banana", "orange"];

$key = array_search("banana", $fruits);
var_dump($key); // int(1)

Para verificar se uma chave específica (não um valor) existe, use array_key_exists() ou isset().

Quando usar uma função diferente

  • Precisa da posição do valor correspondente? → array_search()
  • Verificando uma chave em vez de um valor? → array_key_exists() ou isset()
  • Filtrando um array para elementos correspondentes? → array_filter()
  • Pesquisando um array muito grande repetidamente? Inverta-o para chaves com array_keys() e use isset(), que é mais rápido do que percorrer com in_array().

Resumo

  • in_array($needle, $haystack) retorna true/false indicando se um valor existe em um array.
  • Ela pesquisa valores, é sensível a maiúsculas e minúsculas para strings e usa comparação frouxa por padrão.
  • Passe true como terceiro argumento para correspondência estrita (sensível ao tipo) — preferido quando os tipos importam.
  • Use array_search() quando precisar da chave, e array_key_exists()/isset() ao verificar chaves.

Prática

Prática
Qual é o propósito da função 'in_array' no PHP?
Qual é o propósito da função 'in_array' no PHP?
Was this page helpful?