PHP 8.1.15 Released!

in_array

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

in_arrayBir dizide bir değerin varlığını araştırır

Açıklama

in_array(mixed $iğne, array $samanlık, bool $sıkı = false): bool

sıkı true olmadıkça gevşek karşılaştırma kullanarak samanlık'ta iğne'yi arar.

Bağımsız Değişkenler

iğne

Aranan değer.

Bilginize:

iğne bir dizge ise harf büyüklüğüne duyarlı karşılaştırma uygulanır.

samanlık

Dizi.

sıkı

Bu bağımsız değişkende true belirtilmişse in_array() işlevi samanlık içindeki iğne'nin türüne de bakacaktır.

Bilginize:

PHP 8.0.0 öncesinde, bir iğne dizgesi gevşek kipte 0 dizi değeriyle eşleşirdi ve bunun tersi de geçerliydi. Bu istenmeyen sonuçlara yol açabilir. Diğer türler için de benzer uç durumlar mevcuttur. İlgili değer türlerinden kesinlikle emin olunamıyorsa, beklenmedik davranışlardan kaçınmak için sıkı bağımsız değişkeninin daima true değeriyle kullanılması gerekir.

Dönen Değerler

iğne bulunursa true, aksi takdirde false döner.

Örnekler

Örnek 1 - in_array() örneği

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

in_array() işlevi harf büyüklüğüne duyarlı olduğundan ikinci koşul başarısız olur ve sonuç şu olur:

Irix var

Örnek 2 - Türe de bakan in_array() örneği

<?php
$a
= array('1.10', 12.4, 1.13);

if (
in_array('12.4', $a, true)) {
echo
"'12.4' uygun türde bulundu\n";
}

if (
in_array(1.13, $a, true)) {
echo
"1.13 uygun türde bulundu\n";
}
?>

Yukarıdaki örneğin çıktısı:

1.13 uygun türde bulundu

Örnek 3 - iğnenin bir dizi olduğu in_array() örneği

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

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

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

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

Yukarıdaki örneğin çıktısı:

  'ph' bulundu
  'o' bulundu

Ayrıca Bakınız

  • array_search() - Bir dizide belirtilen değeri arar ve bulursa ilgili ilk anahtarı döndürür
  • isset() - Değişken bildirilmiş ve null değil mi diye bakar
  • array_key_exists() - Belirtilen anahtar veya indis dizide var mı diye bakar

add a note

User Contributed Notes 6 notes

up
384
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
3
leonhard dot radonic+phpnet at gmail dot com
2 months 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
14 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
3 months 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
0
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
-6
Anonymous
3 months 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