ARRAY "Dizi Değişkenlkeri"
Array yani dizi değişkenlerinin çok farklı kullanım alanları vardır.Öyle durumlar olurki değişken tanımlamaya değişken adı bulamazsınız.Mesela yılın aylarını değişken olarak tanımlayacaksınız.Bunun için tek tek $ocak, $şubat diye gitmek hiçde akıllıca değildir.İşte burada array işimizi kolaylaştırıyor.
$aylar = array (
1=> Ocak,
2=> Şubat,
3=> Mart,
4=> Nisan,
5=> Mayıs,
6=> Haziran,
7=> Temmuz,
8=> Ağustoz,
9=> Eylül,
10=> Ekim,
11=> Kasım,
12=> Aralık
);
Biz burada $aylar değişkenine yılın aylarını sıraladık.Peki Ocak vaya nisan yazdırabilmemiz için ne yapmalıyız?Şunu: $aylar[1] bu değişkentahmin ettiğiniz gibi ocak ayını vermektedir. $aylar[9] bu değişkende Eylül ayını temsil etmektedir.Birazdaha ileri düzeye giderek bir örnek verelim.
$kisiler=array (
array(adi=> "Mehmet",soyadi=> "Şamlı",cinsiyet=> "Erke", yer=> "Rize"),
array(adi=> "Öner", soyadi=> "Günaydın", cinsiyet=> "Erkek", yer=> "Eskişehir"),
array(adi=> "Merve", soyadi=> "Deniz", cinsiyet=> "Kız", yer=> "İstanbul"),
array(adi=> "Aysu",soyadi=> "Kara",cinsiyet=> "Kız", yer=> "İstanbul")
);
print $kisiler[0][yer]; //Bu komut Rize yazdıracaktır.
print $kisiler[2][soyadi]; //Bu komut da Deniz yazdıracaktır.
Görüldüğü gibi PHP sıfırdan saymaya başlıyor.Array ile sıralanan bu dizi değişkenlerin tek tek yazdıracak komutları sıralayalım.
$kisiler[0][adi];
$kisiler[0][soyadi];
$kisiler[0][cinsiyet];
$kisiler[0][yer];
Burada verdiğimiz değişkenler tahmin ettiğiniz üzere ilk array da bulunan kişinin özelliklerini verecektir.Diğer kişilerin özelliklerini öğrenmek için sıfır rakamını değiştirmeniz gerekir.Üstte söylediğimiz gibi PHP sıfırdan saymaya başlar.Dizi değişkenlerde farklı bir örnek daha verelim:
$askadaslar[]="Ahmet";
$askadaslar[]="Öner";
$askadaslar[]="İlker";
$askadaslar[]="Soner";
print $arkadaslar[0];
Şimdi bu komut Ahmet yazdıracaktır.Köşeli parantezler içerisine bir değişkende konabilir.PHP'nin bize sunmuş olduğu kolaylık ileriki konularda işimize çok yarayacaktır.Şimdi bu değişkenleri bir döngü ile ekrana basalım.
$sayac=0;
while ($sayac <= 3){
print $askadaslar[$sayac]."
";
$sayac++;
}
Burada görüldüğü gibi bir while döngüsü ile dizi değişkenleri ekrana basıyoruz.Sayacımızın sıfırdan başlatmamızın nedeni dizi değişkenleri belirten sayının sıfırdan başlamasıdır.Birde burada değişik bir şey kullandık print komutunda.Bu gibi durumlarda tırnak içerisine alınmayan değişkenlerden sonra yazı yazabilmemiz için değişkenden sonra bir nokta koyuyoruz ve sonra tırnaklı yazımıza devam ediyoruz.Eğer sonunda yine değişken koyacaksak yine nokta koyup değişkeni yazarız.Mesela: print $degisken."Buraya yazı yazarız".$degisken2; gibi.Birde dizi değişkenlerin sayısını öğrenmemiz için şu komuttan yararlanırız.
print "Brada ". count($askadaslar). "kişi var.";
Burada count komutu sayı saymaya yarar.Yani $arkadaslar değişkeninden kaç adet olduğunu sayıyor.Bu komutu istediğiniz her yerde kullanmanız mümkün.
Dizi Değişkenleri
Her türlü bilgisayar dilinde dizi ya da İngilizce'siyle Array değişkenleri büyük önem taşır. Aynı türden birden fazla değerin farklı değişkenlere atanması için, programcının değişken isimlendirmesiyle uğraşması oldukça güçtür. Örneğin, bir sınıftaki tüm öğrencilerin yaşlarım depolamakta kullanılacak değişkenleri düşünün. Sınıftaki öğrencilerin öğrenci numaralarına bağlı olarak yaşlarım yazmak için,
$ogrenci1 = 15;
$ogrenci2 = 14;
$ogrenci4 = 16;
....
şeklinde bir yazılımla, tüm öğrencilerin öğrenci numaralanna göre bir değişken adı belirlemek ve öğrencinin yaşım değişkenin değeri olarak vermek mümkündür. Bu yolla sınıfa yeni bir öğrenci geldiğinde, yeni bir değişken adı ve değişkenin değeri gerekecektir. Bu tarz dizi değişkenleri gerektiğinde, PHP de array() komutuyla dizi, değişkenleri tanımlanır.
$ogrenci = array ( 1 => 15,
2 => 14,
3 => 16 );
Yukarıdaki kodda $ öğrenci adında bir dizi değişkeni array() komutuyla tanımlanarak, 1 numaralı öğrenci için 15, 2 numaralı öğrenci için 14 ve 3 numaralı öğrenci için de 16 değerinin atanması gerçekleştirilir. Değerler birbirlerinden virgülle ayrılmalıdır. Dizi değişkenlerinde değere ulaşmayı sağlayan belirtece indeks (veya indis) adı verilir. Yukarıdaki örnekte indeks öğrenci numarasıdır. Öğrenci numaralarınım tanımlı olduğu dizi değişkeninde, değerler köşeli parantez içinde indeks belirtilerek çağırılır.
echo $ogrenci[1] ;
Yukandaki komutla $ öğrenci dizi değişkeninde 1 numaralı indekste bulunan değer ekrana basılmaktadır. Bir dizi değişkenini indeks belirtmeden çağırmak hata oluşturur. PHP'de, tüm diğer değişkenlerde olduğu gibi dizi değişkeni tanımlamaları da oldukça esnektir. Bir dizi değişkenim tanımlamak için array() komutu kullanılabileceği gibi bu komuta gerek kalmadan
$ogrenci[5] = 10;
$ogrenci[4] = 9;
şeklinde dizi değişkenine değer ekleyerek de değişken tanımlaması yapılabilir, istenen tüm indeksler ve değişkenler sırayla dizi değişkenine eklenerek oluşturulabilir. Bazı durumlarda indeksin otomatik olarak dizi değişkeni tarafından belirlenmesi de gerekebilir. Bir sınıftaki öğrencilerin yaşlarını öğrenci numarası gözetmeksizin depolamak için,
$ogrenci[] = 10;
$ogrenci[] =9;
şeklinde bir yazım da kullanılabilir. Bu durumda dizi değişkeninin indeksi 0'dan başlayacaktır. Yani dizi değişkenine ilk eklenen değere ulaşmak ve ekrana basmak için,
echo $ogrenci[0] ;
komutu kullanılır.
Çok Boyutlu Dizi Değişkenleri
Bazı durumlarda bir dizi değişkeninde yeni bir değere ihtiyaç duyulur. Sınıf örneğine devam edersek, öğrencilerin öğrenci numaralarına bağlı olarak cinsiyetleri de aynı dizi değişkende saklanabilir. Bu tarz birden fazla indeks ve değer içeren dizi değişkenlerine çok boyutlu dizi değişkenleri (Muiti-Dimensional Array) adı verilir. Öğrenci numarasına bağlı olarak cinsiyeti depolamak için cinsiyet adında bir indeks tanımlayarak,
$ogrenci[1]["cinsiyet"] = "erkek";
$ogrenci[2]["cinsiyet"] = "kız";
şeklinde kullanılabilir. $ogrenci dizi değişkeninde yaş değerlerini öğrenci numarasına bağlı olarak tutmak için de aynı şekilde,
$ogrenci[1]["yas"] = 15;
$ogrenci[2]["yas"] = 14;
tanımlaması yapılmalıdır. Bu tanımlama sayesinde, öğrenci numarasına bağlı olarak bir öğrencinin yaşı ve cinsiyeti $ öğrenci değişkeninde depolanmaktadır. Bu değişkende depolanmış değerlere ulaşabilmek ve ekrana basmak için daha öncekine benzer şekilde,
echo $ogrenci[1]["cinsiyet"];
echo $ogrenci[2]["yas"];
kodu kullanılabilir.
Dizi Değişkeni İşlemleri
Dizi değişkenleri üzerinde gerçekleştirilebilecek birçok işlem bulunmaktadır. Aslında birçok değer barındıran bir tek değişken olan dizi değişkeninde, sıralamalar gerçekleştirmek, rasgele bir değeri çekmek,sıralamayı değiştirmek mümkündür. Dizi değişkende kaç tane değer depolandığını öğrenmek için count() fonksiyonu kullanılır.
echo count($ogrenci);
Dizi değişkenin içindeki değer sayısını öğrenirken, köşeli parantez kullanmaya gerek yoktur. Aynı işlem için count() komutu yerine istenirse sizeof() komutu da kullanılabilir. İçindeki değer sayısı bilinen bir dizi değişkeninin içindeki tüm değerleri ekrana yazmak için while döngüsü kullanılabilir.
$i = 1;
while ($i <= count($ogrenci)):
echo $i.$ogrenci[$i]["cinsiyet"]."<br>";
echo $i.$ogrenci[$i]["yas"]."<br>";
$i++;
endwhile;
Yukarıdaki kod daha önce tanımlanan $ogrenci dizi değişkeninde yer alan cinsiyet ve yas indekslerindeki değerleri ekrana yazar. Bir dizi değişkenindeki değerleri ekrana listelemek için birçok yöntem vardır. Yukarıdaki örnekte görüldüğü gibi, while döngüsü dizi değişkeninin içerdiği değer sayısı kadar çalıştırılarak listeleme yapılıyor. Dizi değişkenleri için daha çok kullanılan listeleme yöntemi list() ve each() kalıplarıyla yapılır. list() kalıbı, bir fonksiyon gibi dursa da aslında PHP'nin yazım kolaylaştırma özelliklerinden biridir. Birden çok değişkene aynı anda değer atamak için kullanılır. Genelde while döngüsüyle birlikte kullanılır. each() kalıbı da bir dizi değişkeninden indeks ve değer ikililerini çekmekte kullanılır.
$ogrenci[1]=15;
$ogrenci[2]=14;
while (list($ogrencino,$yas) = each($ogrenci)) :
echo $ogrencino.$yas."<br>n";
endwhile;
Bu kodla, each() kalıbıyla $ogrenci dizi değişkeninden indeks ve değer bilgileri çekilerek, list() kalıbıyla belirtilen $ogrencino ve $yas değişkenlerine atanıyor. Alınan değerler echo kullanılarak ekrana yazılıyor. Bu işlem dizi değişkendeki tüm değerler ekrana yazılana kadar sürüyor. Bir dizi değişkenindeki indeksleri de bir dizi değişkenine atamak mümkündür. Bunun için PHP'de array_keys() fonksiyonu kullanılır.
$ogrenci[1]=15;
$ogrenci[2]=14;
$indeksler = array_keys($ogrenci);
echo $indeksler[1];
Şeklinde kullanılarak, $ogrenci dizi değişkenindeki indeksler 1 ve 2, yeni tanımlanan $indeksler dizi değişkenine aktarılır. echo komutuyla, $indeksler dizi değişkeninde 1 numaralı değer olan 2 ekrana basılacaktır. Yeni oluşturulan otomatik dizi değişkeninde indeksler 0'dan başlamaktadır. Aynı şekilde bir dizi değişkendeki tüm değerleri bir başka dizi. değişkenine aktarmak için array_values() komutu kullanılır.
$ogrenci[1] = 15;
$ogrenci[2] = 14;
$degerler = array__values($ogrenci);
echo $degerler[1] ;
Bu kodla $ogrenciler dizi değişkenindeki değerler olan 15 ve 14, yeni tanımlanan $degerler dizi değişkenine aktarılmaktadır. Daha sonra bu $degerler değişkenindeki 1 numaralı değer, ekrana echo komutuyla yazılabilir. Ekrana 14 değeri yazılacaktır. Bir dizi değişkenindeki tüm değerleri listelemeden içinde bir değerin olup olmadığı öğrenilebilir. Bu işlem için in_array () fonksiyonu kullanılmaktadır. Bu fonksiyon, mantıksal bir değeri döndürür. Eğer aranan değer dizi değişkeninde mevcutsa doğru, mevcut değilse yanlıştır.
if (in_array(14,$ogrenci))
{ echo("Dizi değişkende mevcut...");
} else
{ echo("Dizi değişkende YOK!!!") ;
}
Bu kod "in_array()" komutundan dönecek sonuca göre aranılan değerin bulunduğuna ya da bulunamadığına dair hata mesajı yazacaktır. Yukarıdaki örnekte "14" değerinin "$ogrenci" dizi değişkeni içinde olup olmadığı denetleniyor.
Sıralama İşlemleri
Dizi değişkenlerinin içerdikleri değerler üzerinde sıralama yapmak için iki farklı tipte komut vardır. PHP'nin sağladığı sıralama komutlarının bir kısmı indeks ve değer ilişkisini gözeterek, bazıları da bu ilişkiyi gözetmeksizin sıralama yapmaktadır. Öğrenci örneğindeki öğrenci numarasına bağlı yaş değerleri bulunduğu
için, sıralama işleminde öğrenci numarası ve yaş değeri eşleşmesi gözetilerek sıralama yapılmalıdır. Değerlerin alfabetik sıralamada indeks eşleşmelerim kaybetmeden sıralanması için, asort() fonksiyonu kullanılır.
$ogrenci[1]=15;
$ogrenci[2]=14;
$ogrenci[3]=17;
asort($ogrenci) ;
reset($ogrenci) ;
while (list($ogrencino,$yas) = each($ogrenci)) :
echo $ogrencino.":".$yas."<br>n" ;
endwhile;
Listeleme sonucunda ekrana,
2:14 1:15 3:17
bilgisi gelecektir. Öğrenci numaralarının sıralamasının küçükten büyüğe doğru yapılması için, asort() fonksiyonu kullanıhr. Rasgele sıralanmış öğrenci numaraları sıralandıktan sonra, reset() fonksiyonuyla dizi değişkeni başa sarılır. Daha sonra while döngüsüyle ekrana öğrenci numarası ve yaş bilgileri basılabilir. Sıralama işlemi alfabetik olduğu için, rakamlar küçükten büyüğe doğru sıralanacaktır. Ters sıralama yapmak için arsort() fonksiyonu kullanılır.Dizi değişkenlerinde barınan indeks-değer ikilileri, genelde dizi değişkene atama sıralarına göre bulunur. Yani önce 3 numaralı öğrencinin yaşı girildiyse, sonrasında 1 ve 2 numaralı öğrencilerin yaşları belirtildiyse, dizi değişkeninin ekranda sıralama yapılmadan listelenmesi 3, 1, 2 şeklinde olacaktır.
$ogrenci[3] = 17;
$ogrenci[1] = 15;
$ogrenci[2] = 14;
while (list($ogrencino,$yas) = each($ogrenci)) :
echo $ogrencino.":".$yas."<br>n" ;
endwhile;
Ekrana şu sıralama dökülür:
3:17 1:15 2:14
Düzensiz sırayla oluşturulan dizi değişkenlerini indeks bazında sıralamak için ksort() fonksiyonu kullanılır.
$ogrenci[3] = 17;
$ogrenci[1] = 15;
$ogrenci[2] = 14;
ksort($ogrenci);
reset($ogrenci);
while (list($ogrencino,$yas) = each($ogrenci)) :
echo $ogrencino.":".$yas."<br>n";
endwhile;
Bu örnek ekrana şu bilgiyi döken
1:15 2:14 3:17
Bu kodla ekrana yazılacak olan listeleme l, 2, 3 şeklinde olacaktır.ksort() fonksiyonu da indeks-değer eşleşmesini koruyarak sıralama yapar. Bu eşleşmeyi korumaya gerek duyulmayan durumlarda, sıralama sort() fonksiyonuyla yapılır. Bu fonksiyon, değerleri temel alarak sıralama yapar ve indeksleri yeniden oluşturur.
$ogrenci[3]=17;
$ogrenci[1]=15;
$ogrenci[2]=14;
sort($ogrenci);
reset($ogrenci) ;
while (list($ogrencino,$yas) = each($ogrenci)) :
echo $ogrencino.":".$yas."<br>n" ;
endwhile;
Bu örnek ekrana şu sıralamayı döker:
0:14 1:15 2:17
Aynı sıralama işleminde değerleri ters sıralamak için rsort() fonksiyonu kullanılır.