logo


Welcome Guest! To enable all features please Giriş or Kayıt.

Bildirim

Icon
Error

Ayarlar
Son mesaja git Go to first unread
kodcu  
#1 Gönderildi : 13 Aralık 2016 Salı 09:43:30(UTC)
kodcu

Sıralama: Advanced Member

Gruplar: Registered
Katılan: 12.12.2016(UTC)
Mesajlar: 37
Turkey

Dizi Değişkenleri Kullanımı

Yukarıdaki paragrafta "..değişkenin istediğimiz değerine, o değerin endeks adını
yazarak, çağrıda bulunabiliriz.." dediğimizi görmüş olmalısınız. Dizi veya tekil, değişkenleri
oluşturmamızın sebebi, tuttukları değerleri programımızın gereği olan şekilde ve yerde
kullanmaktır. Sadece bir değer tutan değişkenleri örneğin print() komutu ile sık sık
kullandık. Yukarıda dizi değişken örneklerinde de bazı değişkenleri ve değerlerini çağırdık.
Ancak dizi değişkenlerin değerlerinden yararlanabilmek için başka araçlar da vardır.
Herşeyden önce dizi değişkenlerin büyüklüğü, boyutu bizim için önem taşıyabilir.
Özellikle bir veritabanı dosyasını okutarak oluşturacağımız dizi değişkenin kaç elemanı ve
her bir elemanın kaç ögesi bulunduğunu bilmemiz gerekebilir.
Bir dizi değişkenin kaç elemanı bulunduğu, o değişkenin count() özelliği
sorgulanarak öğrenilir. count(), dizideki eleman sayısını verir. Şimdi bunu bir örnekle
görelim. Daha önce kaydettiğimiz dizi_degiskenler04.php dosyasını açın ve PHP
bölümünde şu değişikliği yaparak dizi_degiskenler06.php adıyla kaydedin:


Kod:

<?php   
 $ogrenciler[] = "Özbay";   
 $ogrenciler[] = "Muharrem";   
 $ogrenciler[] = "Hasan";   
 $ogrenciler[] = "Şahika"; 
 // Buraya başka kodlar girecek 
 print ("\$ogrenciler adlı dizide ". count($ogrenciler) ." adet eleman var."); 
?> 




Bu program Browser penceresine dizimizde 4 eleman bulunduğunu bildirecektir.
Şimdi işleri biraz karmaşık hale getirelim! Yukarıdaki kodun, print() satırının yerine şu
satırları ekleyerek, dizi_degiskenler06a.php adıyla kaydelim.

Kod:

print ("\$ogrenciler adlı dizide ". count($ogrenciler) ." adet eleman var."); 
print ("<br><br>"); 
for ($sayac=1 ;  $sayac <= count($ogrenciler) ; $sayac++ ) { 
 print ("\$ogrenciler dizisinin ". $sayac ."'ncı elemanı: " . $ogrenciler[$sayac] ."<br>");  
}



Bu programı çalıştırmadan önce, eklediğimiz satırları irdeleyelim. İlk print()
komutunun Browser penceresine "yazdıracağı" metinde geçen ters bölü işaretini hatırlıyor
olmalısınız. Bu, tek veya çift tırnak içine de almış bile olsak, PHP'nin, bir değişken adını
gördüğü zaman onun yerine o değişkenin tuttuğu değeri yazması sebebiyle, $ işareti gibi
PHP için özel anlamı olan işaretlerin anlamlandırılmasını önlemek için yaptığımız ve adına o
karakteri kurtarma veya ESCaping dediğimiz işlemdir. Bu işlemle, PHP'nin anlamlı işaret
değil de metin saymasını istediğimiz karakterlerin önüne ters bölü işareti koyarız: \" gibi.
Buradaki örnekte, bu sayede PHP "$ogrenciler" kelimesini değişken adı olarak değil, düz
metin olarak görüyor. Ki, aynı komutta aynı kelimeyi tekrar kullandığımızda bu kez
değişken adı olarak kullanıyoruz ve bu değişkenin count() ögesinin değerini öğreniyoruz.
$ogrenci değişkenin "Özbay," "Muharrem," "Hasan" ve "Şahika" değerleri bulunduğuna
göre, bu değişkenin count()'u 4 olacaktır. ("Ozbay" = 0, .. "Şahika" = 3 olmak üzere..) Bu
print() komutu, Browser penceresine tahmin ettiğiniz gibi "$ogrenciler adlı dizide 4 adet
eleman var." yazdıracaktır. İkinci print() satırı ise ekrana ardarda iki yeni satır işareti
gönderecektir.
Şimdi karışık noktaya geliyoruz! Burada bir for döngüsü başlıyor. Önce döngünün
kaç kez tekrar edeceğini belirleyecek olan değişkeni tanımlıyoruz: $sayac. Sonra bu
sayacın kaça kadar çıkacağını belirliyoruz. Bu sayıyı, bize yine count() veriyor. Ve tabiî for
döngüsünün devam edebilmesi için gerekli son unsur olan, sayacın arttırılmasını sağlayan
deyim var. Programımız bu döngünün içinde, yani dört kez, her seferinde dizinin bir
elemanın adını Browser penceresine gönderiyor. Şimdi, hatırlayacaksınız, dizi değişkenlerin
elemanlarının bir sıra sayısı vardı. Örneğin "Şahika" değeri, dizinin 3 numaralı, yani
dördüncü elemanı; ve bu elemanın değerini ekrana göndermek için şu komutu vermemiz
yeterli: print ($ogrenciler[4]); Programda ise buradaki endeks sayısını, $sayac değişkeninin o andaki değerinden
alıyoruz. Döngünün her seferinde bu değer bir artacağı için bize $ogrenciler değişkeninin o
anda hangi elemanının değeri çağırmak istiyorsak, o elemanın endeksini vermiş olacaktır.
Ve sonuç olarak programımız, dizideki bütün değerleri Browser'a gönderecektir.
Kimi zaman buradaki örnekte olduğu gibi, dizinin bütün elemanlarını bir for
döngüsüyle değil, foreach döngüsüyle bulmak daha kolay olabilir. Kısaca belirtmek
gerekirse, foreach döngüsü, bir dizi değişkenin bütün elemanları için, arzu ettiğiniz işi
yapar. foreach döngüsünü yazarken komutun kaç kere icra edileceğini bir sayaçla tutmak
gerekmez; çünkü döngü, ona adını verdiğiniz değişkenin içindeki bütün değerler bitinceye
kadar devam edecektir. Yukarıdaki örnekteki bütün print() ve for satırlarını atarak yerine
şunları yazıp ve dizi_degiskenler06b.php adıyla kaydelim.

Kod:

foreach ($ogrenciler as $ogrenci) {  
 print ("$ogrenci<br>");   
}


foreach döngüsü, bir dizi değişkenin adını içinden değer çekilecek kaynak olarak
ister; bunu "as" (olarak) kelimesi izler; sonra diziden alınacak her bir değeri geçici olarak
tutacak değişkenin adı verilir. Buradaki print() komutumuz, bu geçici değişkenin tuttuğu
değeri Browser'a gönöderecektir. Bu değer ise döngünün her adımında dizi değişkendeki
bir değer yani öğrencilerin listesi olacaktır.
Dizi elemanlarının farklı özelliklerine ilişkin değerlere endeks adı verdiğimiz ilişkili
dizilerde ise eleman değerlerini çağırmak foreach döngüsünün biraz farklı yazılmasını
gerektirir. Perl'e aşina alanların bu dizi türüne "hash" dendiğini hatırlayacaklardır. PHP'de
de Perl'ün hash türü değişkenlerinde olduğu gibi, endeks adlarına "anahtar" (key), bu
endeksin belirlediği değere ise (evet, doğru tahmin ettiniz!) değer (value) denir. İlişkili
dizilerden değer almak üzere foreach döngüsü yazılırken, değerin anahtarını ve değerin
kendisini iki geçici değişkene yazmamız gerekir. Daha önce yazdığımız
dizi_degiskenler05.php adlı dosyayı açarak mevcut tek satırlık print() kodunun yerine
şunları yazın ve dizi_degiskenler07.php adıyla kaydedin:

Kod:

foreach ($ogrenciler as $anahtar=>$deger) { print ("$anahtar = $deger<br>"); } 


Bu kodu çalıştırmadan önce foreach döngüsü üzerinde kısaca duralım: döngü,
$ogrenciler dizisini okumaya başladığında içinde, benzetme yerinde ise, iki sütun, ve bir
çok satırlar bulacaktır. Bu sütunlardan birincisi, ikinci sütundaki verinin adıdır; foreach,
birinci sütundaki veriyi alarak $anahtar adlı geçici değişkenin değeri olarak atayacak;
sonra ikinci sütuna geçecek ve bunu alarak $deger adlı geçici değişkenin değeri yapacaktır.
Döngü, daha sonra print() komutunu icra edecektir. print() ise ve geçici $anahtar
değişkeninin değerini, ardından eşittir işaretini ve son olarak da geçici $deger değişkeninin
değerini Browser'a gönderecektir. print() komutunun icrası bitince, foreach, kendisine
verdiğimiz $ogrenciler değişkeninde anahtar-değer çiftini ele almadığı satır kalıp
kalmadığına bakacak, ve elemanların tümü bitinceye kadar bu işlemi tekrar edecektir.
Tabiî, sonuç anahtar ve değerlerin altalta sıralanması olacaktır.
Bir de bu bölümün en başında ele aldığımız çok elemanlı ilişkili diziler vardı. Onların
içindeki değerleri acaba nasıl alabilir ve kullanabiliriz? Tabiî yine bir döngü ile. Fakat bu
kez, döngü-içinde-döngü kullanmak zorundayız. Böyle bir diziyi gözümüzde canlandırırsak,
belki neden iki döngüye ihtiyaç olduğununu daha iyi görebiliriz. Gözümüzün önüne bir
tablo getirelim: dizinin her bir elemanı (bizim öğrenimizde öğrenciler9 bir satırda yer almış
olsun; sütunlar olarak da bu elemana ait değerler yer alıyor. Sütun başlığı ise, bu değerin
endeksi olan anahtar! Şimdi bu bölümün başında yazdığımız dizi_degiskenler0i.php adlı dosyayı
açalım tek satırlık print() komutunun yerine şu satırları yazarak
dizi_degiskenler08.php adıyla kaydedelim:

Kod:

foreach ( $ogrenciler as $ogrenci ) {  
  foreach ( $ogrenci as $anahtar => $deger ) {   
    print ("$anahtar = $deger <br> ");   
  }  
 print ("<br>");  
}


Kısaca irdelersek, bu kodda foreach döngüsünün önce çok-boyutlu değişkenimizin
bir satırını içindeki bütün anahtar+değer çeftleri ile ele alıp, tümünü $ogrenci adlı
değişkene geçici olarak yerleştirdiğini görüyoruz. Bu foreach döngüsünün ilk işi yeni bir
foreach döngüsü başlatmak oluyor. Yeni foreach ise sazı eline alır almaz, önce, kendisi çok
ögeli bir değişken olan (çünkü içinde bir öğrenciye ait, tüm değişkenler ve onların endeks
adları var) $ogrenci değişkeninin içindeki anahtar ve değer çiftlerini tek-tek, $anahtar ve
$deger değişkenlerine yerleştiriyor; sonra print() komutu ile, aralarına eşittir işareti
koyarak bu değişkenlerin değerlerini Browser penceresine gönderiyor. Bu döngü biter
bitmez, ilk foreach yaptıracağı işlere kaldığı yerden devam ediyor; ve ekrana bir yeni satır
komutu gönderierek, başa dönüyor; bu kez çok boyutlu dizi değişkenin yeni bir elemana
geçiyor. Taa ki, dizinin bütün elemanları ve elemanların bütün ögeleri bitinceye kadar.
Bu noktada bir uyarı: Gerçek programda bir dizinin elemanlarına ilk ulaştığımızda,
elemanın içinde değer bulunup bulunmadığını anlamak yerinde olur. Bunu is_array()
fonksiyonu ile yapabiliriz. Bu fonksiyon, dizinin içinde değer varsa, True/Doğru, yoksa
False/Yanlış karşılığını verecektir. Buradaki örnekte, ilk foreach satırından hemen sonra: is_array( $ogrenci ) satırını koyarak, dizinin o anda okunan elemanın içinde değer bulunup bulunmadığını
anlayabiliriz.



Bu konudaki kullanıcılar
Guest
Forumu Atla  
Bu foruma yeni konular postalayamazsınız.
Bu forumda ki konulara yeni posta gönderemezsiniz.
Bu forumdaki postalarınızı silemezsiniz.
Bu forumdaki postalarınızı düzenleyemezsiniz.
Bu forumda anketler yaratamazsınız.
Bu forumdaki anketlere oy veremezsiniz.