in_array

(PHP 4, PHP 5, PHP 7, PHP 8)

in_arrayCheca se um valor existe em um array

Descrição

in_array(mixed $needle, array $haystack, bool $strict = false): bool

Procura por needle (agulha) no haystack (palheiro) usando comparação frouxa a não ser que strict seja definido.

Parâmetros

needle

O valor procurado.

Nota:

Se needle for uma string, a comparação é feita diferenciando caracteres maiúsculos e minúsculos.

haystack

O array.

strict

Se o terceiro parâmetro strict for true então in_array() também irá checar os tipos de needle em haystack.

Nota:

Antes do PHP 8.0.0, uma needle string irá corresponder a um valor de 0 no array em modo não estrito, e vice-versa. Isso pode levar a resultados indesejáveis. Casos extremos similares exitem para outros tipos, também. Se você não tem certeza absoluta dos tipos dos valores involvidos, sempre use a flag strict para evitar comportamento inesperado.

Valor Retornado

Retorna true se needle é encontrado no array, false caso contrário.

Exemplos

Exemplo #1 Exemplo da in_array()

<?php
$os 
= array("Mac""NT""Irix""Linux"); 
if (
in_array("Irix"$os)) { 
    echo 
"Tem Irix";
}
if (
in_array("mac"$os)) { 
    echo 
"Tem mac";
}
?>

A segunda condicional falha pois in_array() diferencia letras minúsculas e maiúsculas. Então, a saída seria:

Tem Irix

Exemplo #2 in_array() com checagem de tipos

<?php
$a 
= array('1.10'12.41.13);

if (
in_array('12.4'$atrue)) {
    echo 
"'12.4' encontrado com checagem de tipo\n";
}

if (
in_array(1.13$atrue)) {
    echo 
"1.13 encontrado com checagem de tipo\n";
}
?>

O exemplo acima irá imprimir:

1.13 encontrado com checagem de tipo

Exemplo #3 Exemplo de in_array() passando um array para needle

<?php
$a 
= array(array('p''h'), array('p''r'), 'o');

if (
in_array(array('p''h'), $a)) {
    echo 
"'ph' foi encontrado\n";
}

if (
in_array(array('f''i'), $a)) { 
    echo 
"'fi' foi encontrado\n";
}

if (
in_array('o'$a)) {
    echo 
"'o' foi encontrado\n";
}
?>

O exemplo acima irá imprimir:

    'ph' foi encontrado
    'o' foi encontrado

Veja Também

  • array_search() - Procura por um valor em um array e retorna sua chave correspondente caso seja encontrado
  • isset() - Informa se a variável foi iniciada
  • array_key_exists() - Checa se uma chave ou índice existe em um array

add a note

User Contributed Notes 6 notes

up
381
beingmrkenny at gmail dot com
11 years ago
Loose checking returns some crazy, counter-intuitive results when used with certain arrays. It is completely correct behaviour, due to PHP's leniency on variable types, but in "real-life" is almost useless.

The solution is to use the strict checking option.

<?php

// Example array

$array = array(
   
'egg' => true,
   
'cheese' => false,
   
'hair' => 765,
   
'goblins' => null,
   
'ogres' => 'no ogres allowed in this array'
);

// Loose checking -- return values are in comments

// First three make sense, last four do not

in_array(null, $array); // true
in_array(false, $array); // true
in_array(765, $array); // true
in_array(763, $array); // true
in_array('egg', $array); // true
in_array('hhh', $array); // true
in_array(array(), $array); // true

// Strict checking

in_array(null, $array, true); // true
in_array(false, $array, true); // true
in_array(765, $array, true); // true
in_array(763, $array, true); // false
in_array('egg', $array, true); // false
in_array('hhh', $array, true); // false
in_array(array(), $array, true); // false

?>
up
1
leonhard dot radonic+phpnet at gmail dot com
26 days ago
I got an unexpected behavior working with in_array. I'm using following code:

<?php
// ...
$someId = getSomeId(); // it gets generated/fetched by another service, so I don't know what value it will have. P.S.: it's an integer

// The actual data in my edge-case scenario:
// $someId = 0;
// $anyArray = ['dataOne', 'dataTwo'];
if (in_array($someId, $anyArray)) {
   
// do some work
}
// ...
?>

With PHP7.4, in_array returns boolean true.
With PHP8.1, in_array returns boolean false.

It took me quite some time to find out what's going on.
up
10
rhill at xenu-directory dot net
13 years ago
I found out that in_array will *not* find an associative array within a haystack of associative arrays in strict mode if the keys were not generated in the *same order*:

<?php

$needle
= array(
   
'fruit'=>'banana', 'vegetable'=>'carrot'
   
);

$haystack = array(
    array(
'vegetable'=>'carrot', 'fruit'=>'banana'),
    array(
'fruit'=>'apple', 'vegetable'=>'celery')
    );

echo
in_array($needle, $haystack, true) ? 'true' : 'false';
// Output is 'false'

echo in_array($needle, $haystack) ? 'true' : 'false';
// Output is 'true'

?>

I had wrongly assumed the order of the items in an associative array were irrelevant, regardless of whether 'strict' is TRUE or FALSE: The order is irrelevant *only* if not in strict mode.
up
0
Anonymous
1 month ago
$a = new StdClass();
$b = new StdClass();

// Expected: false, got: true
var_dump(in_array($a, [$b]));
// bool(true)

// Works fine
var_dump(in_array($a, [$b], true));
// bool(false)
up
1
thomas dot sahlin at gmail dot com
13 years ago
If you're creating an array yourself and then using in_array to search it, consider setting the keys of the array and using isset instead since it's much faster.

<?php

$slow
= array('apple', 'banana', 'orange');

if (
in_array('banana', $slow))
    print(
'Found it!');

$fast = array('apple' => 'apple', 'banana' => 'banana', 'orange' => 'orange');

if (isset(
$fast['banana']))
    print(
'Found it!');

?>
up
-1
Anonymous
1 month ago
$a = new StdClass();
$b = new StdClass();

// Expected: false, got: true
var_dump(in_array($a, [$b]));
// bool(true)

// Works fine
var_dump(in_array($a, [$b], true));
// bool(false)
To Top