Menu

PHP in_array(): Bir Değer Dizide Var mı Kontrolü

in_array($needle, $haystack) değer dizideyse true döndürür. Türlerin de eşleşmesi için katı kontrolde üçüncü argüman olarak true verin: in_array('1', $ids, true). Katı parametreyi, büyük küçük harf duyarsız aramayı, birden çok değeri kontrol etmeyi, iç içe dizileri ve hızlı isset alternatifini öğrenin.

Bu sayfada çalıştırılabilir editörler var - düzenle, çalıştır ve sonucu anında gör.

in_array($needle, $haystack) değer dizide bir yerdeyse true, değilse false döndürür. Aynı türü de şart koşmak için üçüncü argüman olarak true verin, in_array($needle, $haystack, true); varsayılan olarak kullanılması gereken bu katı biçimdir.

in_array() yalnızca değerlere bakar. Bir anahtarın var olup olmadığını kontrol etmek için array_key_exists() veya isset() kullanın.

Katı (strict) parametre

Üçüncü argüman olmadan in_array() karşılaştırmadan önce türleri dönüştüren == ile karşılaştırır. true ile === ile karşılaştırır: değer ve tür ikisi de eşleşmelidir. Dizi sayıları ve dizgeleri karıştırdığı anda fark ortaya çıkar; formlardan, URL'lerden ve CSV dosyalarından gelen verilerde bu yaygındır.

Aşağıdaki her hücre, o değer çifti için PHP 8.3'te == ve === operatörlerinin döndürdüğü sonuçtur. Kullandığınız modda aranan değer ve herhangi bir eleman tabloda true veriyorsa in_array() true yanıtını verir. Sekmeler arasında geçin ve null, true ve sayısal dizge satırlarına bakın.

in_array gevşek (==) ve katı (===) eşleşmeler
Point at or tap a cell to read it as PHP.
$a == $btruefalsenull01"0""1""""abc""10""1e1"10[]
true
false
null
0
1
"0"
"1"
""
"abc"
"10"
"1e1"
10
[]
Every cell computed by PHP 8.3.19.

PHP 8'de bir kural değişti: sayısal olmayan bir dizge artık 0 değerine eşit değildir, bu yüzden in_array('abc', [0]) bugün false iken PHP 7'de true idi. PHP 7 için yazılmış kodlar bazen buna dayanıyordu; bu da true verip dönüştürme kurallarına güvenmemek için bir neden daha. Karşılaştırma operatörleri sayfası bunları ayrıntılı olarak açıklar.

Büyük küçük harf duyarsız in_array

in_array() dizgeleri birebir karşılaştırır, bu yüzden 'PHP' ve 'php' farklıdır. Kontrol etmeden önce hem aranan değeri hem diziyi küçük harfe çevirin. mb_strtolower() aksanlı ve Latin olmayan harfleri de işler.

Aynı anda birkaç değeri kontrol etme

in_array() tek bir aranan değer alır. Birkaç değer için dizileri küme gibi karşılaştırın: array_diff() eksik olan değerleri döndürür, yani boş bir sonuç hepsinin var olduğu anlamına gelir; array_intersect() ise bulunan değerleri döndürür.

array_diff() ve array_intersect() değerleri dizge olarak karşılaştırır, bu yüzden orada 1 ve '1' eşit sayılır.

Çok boyutlu bir dizide in_array

in_array() iç içe dizilerin içinde arama yapmaz. Herhangi bir satırda belirli bir değere sahip bir alan olup olmadığını kontrol etmek için önce o alanı array_column() ile çıkarın, sonra düz listede arayın.

Son satır aranan değerin kendisinin de bir dizi olabileceğini gösterir: aynı anahtarlara, değerlere ve sıraya sahip özdeş bir satırla eşleşir.

in_array, array_search ve isset karşılaştırması

Üçü de "orada mı?" sorusunu yanıtlar, ama farklı şeyler döndürür ve farklı hızlarda çalışır:

ÇağrıDöndürürBüyük bir dizide hız
in_array($v, $arr, true)true veya falseher elemanı tarar
array_search($v, $arr, true)anahtar veya falseher elemanı tarar
isset($set[$v])true veya falsetek bir hash araması

Değerin nerede olduğunu bilmeniz gerektiğinde array_search() kullanın. Birçok değeri aynı büyük listeye karşı kontrol ettiğinizde listeyi bir kez ters çevirin ki değerleri anahtar olsun, sonra isset() kullanın.

Süreler çalıştırmadan çalıştırmaya değişir ama aradaki fark değişmez: isset() araması sabit kalırken in_array() listenin boyutuyla büyür. array_flip() yalnızca dizge ve tam sayı değerlerle çalışır ve tekrarlar tek bir anahtara iner; bu, üyelik kontrolü için önemli değildir.

Sıkça Sorulan Sorular

in_array fonksiyonunun üçüncü parametresi ne işe yarar?

Katı karşılaştırmayı açar. in_array($x, $arr, true) === ile karşılaştırır, bu yüzden değerin yanı sıra tür de eşleşmelidir: in_array('1', [1, 2], true) false olur. Bu parametre olmadan PHP == ile karşılaştırır ve önce türleri dönüştürür.

in_array ile her zaman katı modu mu kullanmalıyım?

Genellikle evet. Gevşek mod in_array(null, [0]), in_array(true, ['any string']) ve in_array('1e1', ['10']) ifadelerinin hepsinin true döndürmesine yol açar. Yalnızca bir formdan gelen '5' değerinin 5 tam sayısıyla bilerek eşleşmesini istediğinizde kapalı bırakın.

in_array'i büyük küçük harfe duyarsız nasıl yaparım?

İki tarafı da küçük harfe çevirin: in_array(strtolower($needle), array_map('strtolower', $haystack), true). Metin ASCII olmayan harfler içerebiliyorsa mb_strtolower kullanın.

Birkaç değerin bir dizide olup olmadığını nasıl kontrol ederim?

Hepsini şart koşmak için geriye hiçbir şey kalmadığını kontrol edin: !array_diff($needles, $haystack). En az birini şart koşmak için bir kesişim olup olmadığına bakın: (bool) array_intersect($needles, $haystack).

in_array yavaş mı?

Diziyi eleman eleman tarar, bu yüzden birçok kez kontrol edilen büyük dizilerde yavaştır. Diziyi bir kez $set = array_flip($haystack); ile ters çevirin ve tek bir hash araması olan isset($set[$value]) kullanın.

Coddy programlama dilleri çizimi

Coddy ile kodlamayı öğren

BAŞLA