PHP Dizilerde ortak elemanları bulmak: array_intersect()
Şubat 22, 2011 | In: Genel
PHP’de dizilerin(array) işlerimizi ne kadar kolaylaştırdığı ortada. Hemen hemen her kodlamada dizi kullanırız. Dizilerin çok kullanılması ve bize kolaylık sağlamasının en önemli sebeplerinden biri de php’de diziler için yapılmış fonksiyonlardır. Bu yazımda geçenlerde ihtiyaç duyduğum, farklı farklı dizilerdeki ortak elemanları almamızı sağlayan array_intersect() fonksiyonundan bahsedeceğim.
Fonksiyonun kullanımını:
$dizi1 = array("yeşil", "pembe", "kırmızı");
$dizi2 = array("yeşil", "mavi", "mor");
$sonuc = array_intersect($dizi1, $dizi2);
Örnek koddaki $sonuc değişkeni bir array olacaktır ve içinde sadece yeşil elemanı bulunacaktır.
Bu fonksiyona ihtiyaç duyduğum bir durumu ve bunun için yazdığım döngüyüde paylaşmak istiyorum. Diyelim ki içlerinde veritabanından çektiğimiz içerik id’lerinin bulunduğu dizilerimiz olsun. Bu diziler de, bir dizi değişkende (bu aşağıdaki kodda $ids değişkeni oluyor.) ayrı ayrı elemanlar olarak tanımlansın. Bu elemanlardaki ortak id’leri bir dizide toplayalım.
$ids['dizi1'] = array(3,1,6,10,16,18);
$ids['dizi2'] = array(5,3,10,7,6,4,21);
$ids['dizi3'] = array(1,3,10,11,24,6);
$ids['dizi4'] = array(12,6,25,10,16,3,18);
$ids['dizi5'] = array();
$ortak = array();
foreach($ids as $key=>$item){
if(count($ortak)>0){ //eğer $ortak doluysa array_intersect yapıyor.
$ortak = array_intersect($ids[$key],$ortak);
}else{
$ortak = $ids[$key];
}
}
print_r($ortak);
Örnek verdiğim kodda $ids dizisinin elemanları veritabanından ayrı ayrı sorgularla getirilmiş olabilir. Ben kodda örnek amaçlı yazdım. Döngü sonucunda $ortak değişkeninin elemanları, tüm dizilerde ortak olan 3,10 ve 6 id’leri olacaktır. $ids['dizi5'] değişkeni boş olduğu için döngüde count() ile kontrol edip array_intersect() fonksiyonundan geçmesini engelliyoruz.