Kaynak olarak kullanılabilen bir çok sitede, bir metod, bir özellik, veya bir fonksiyon anlatılırken sadece o fonksiyon anlatılıyor. Bu noktada kişnin dikkat etmesi gereken şeyleri tecrübe etmesi gerekiyor. Foreach kullanımını sorsak herkes bilir. Zor da bir şey değil fakat, bu noktada amaç, bir hata oluşmasının önüne geçmek, istenmeyen şeylerin önüne geçmek.
Genel Kullanım:
AŞağıdaki kodda dizi içinde dizi olmadığı düşünülerek
$array = array("a"=>"emre","b"=>"ahmet"); foreach($array as $key=>$val){ echo $key." indisli değer =".$val." "; }
Fakat bu noktada, $array dizisinin içinde de bir dizi varsa, bu noktada echo ettiğim şey bir array olacak ve hatalı bir şey yapmış olacağım.
Bu sebeple değişkenlerinizin tiplerine göre işlem yaptmayı, diğer tipler için de hata verdirtmeyen bir çözüm bulmanız gerekiyor.
1. Konu : $$key = $val !!
$array = array("a"=>"emre","b"=>"ahmet"); foreach($array as $key=>$val){ $$key = $val; }
Böyle diyerek, otomatik olarak $a = “emre”; $b = “ahmet” demiş oluyoruz. Fakat arrayin key’i bir integer gelirse yani örnek dizimiz şöyle olursa :
$array = array(0=>"emre",1=>"ahmet"); //yani bu aşağıdakiyle aynıdır bilindiği gibi $array = array("emre","ahmet");
Bu durumda $o = “emre”, $1 = “ahmet” olacaktır. Normalde Php de sayı ile başlayan değişkenler üretilmez, ama bu noktada backgroundda yapılan bu işlemde windows ortamında hata vermeden çalışıyor. Bu kötü bir durum, çünkü çok rahat hata yapmanıza sebep olabilir. BU yüzden $$key = $val olayını kullanmanızı tavsiye etmiyorum.
2. Konu : Dizinin kontrolü : isset ve is_array
Bir diziyi foreach’ten geçirmeden önce mutlaka kontrol etmelisiniz. Yani bunu foreach kullanımı gibi kendinizle özdeşleştirin.
$array = array("a"=>"emre","b"=>"ahmet"); if(isset($array) && is_array($array)){ foreach($array as $key=>$val){ echo $key." indisli değer =".$val." "; } }
Bunu kendinize refleks edinin. Bu dizi içinde dizi olma durumlarında hata yapmanızı direkt olarak engelleyecektir. Yani örnek dizi şöyle olursa ;
$k = //bir sayı $array[$k] = array("a"=>"emre","b"=>"ahmet"); $k // karmaşık bir programda k değişebilir. foreach($array[$k] as $key=>$val){ echo $key." indisli değer =".$val." "; }
Bu durumda hata verme ihtimali yüksek, çünkü k değeri bir değişken ve foreach e gelmeden önce değişmiş olabilir. Bu durumda isset ve is_array hayat kurtarır. Doğrusu da şu şekilde olacak ;
if(isset($array[$k]) && is_array($array[$k])){ foreach($array[$k] as $key=>$val){ echo $key." indisli değer =".$val." "; } }