PHP'de Bayraklarla Çalışma
Şimdi bayraklarla çalışmayı öğreneceğiz.
Bayrak, yalnızca iki değer alabilen özel bir değişkendir:
true ve false. Bayraklar kullanılarak,
bir şeyin yokluğunu kontrol eden problemler çözülebilir:
örneğin, bir dizide belirli bir değere sahip bir öğenin
olmadığını kontrol edebiliriz. Hadi başlayalım.
Şu problemi çözelim: sayılardan oluşan bir dizi veriliyor,
içinde değeri 3 olan bir öğe olup olmadığını kontrol
etmemiz gerekiyor. Varsa '+++' yazdıralım, yoksa
'---' yazdıralım.
Öncelikle '+++' yazdırmayı deneyelim.
Bunun için dizimizin tüm öğelerini döngüyle gezelim
ve bir if ile mevcut öğenin değeri 3'e eşit mi
diye soralım. Eşitse '+++' yazdıralım:
<?php
$arr = [1, 2, 3, 4, 5];
foreach ($arr as $elem) {
if ($elem === 3) {
echo '+++';
}
}
?>
Ancak çözümümüz pek iyi değil: çünkü eğer dizide
bir tane değil de birden fazla 3 değeri varsa,
'+++' birden fazla kez yazdırılacaktır. Dizimizi
düzenleyip (içinde iki tane 3 değeri olan öğe yapalım)
ve bundan emin olalım:
<?php
$arr = [1, 2, 3, 4, 3, 5];
foreach ($arr as $elem) {
if ($elem === 3) {
echo '+++'; // birden fazla kez yazdırır
}
}
?>
Sorunu düzeltelim: eğer öğe zaten bulunduysa,
break kullanarak döngüyü sonlandıralım:
<?php
$arr = [1, 2, 3, 4, 3, 5];
foreach ($arr as $elem) {
if ($elem === 3) {
echo '+++';
break; // döngüyü sonlandır
}
}
?>
Şimdi, eğer dizide hiç 3 değerine sahip öğe yoksa,
'---' yazdırılacak şekilde yapmaya çalışalım.
Yaygın bir yanlış anlama, if'imize else eklemektir -
bu durumda '---', 3 olmayan tüm öğeler için
yazdırılacaktır:
<?php
$arr = [1, 2, 3, 4, 5];
foreach ($arr as $elem) {
if ($elem === 3) {
echo '+++'; // 3 numaralı öğede yazdırır
} else {
echo '---'; // 1, 2, 4, 5 numaralı öğelerde yazdırır
}
}
?>
Sonuç olarak, else ekleme fikri kötü ve çalışmayan
bir fikirdir. Bu tür problemleri (bu tür problemler oldukça
sık karşılaşılır) çözmek için sözde bayraklar kullanılır.
Yukarıda da belirtildiği gibi, bayrak, yalnızca iki değer
alabilen bir değişkendir: true veya false.
Pekala, flag adında bir değişken yapalım.
Şu anlama gelsin: eğer true ise, dizide 3
öğesi vardır, eğer false ise, böyle bir öğe yoktur.
Başlangıçta flag değişkenini false değerine
ayarlayalım - yani dizide 3 öğesi olmadığını varsayalım:
$arr = [1, 2, 3, 4, 5];
$flag = false; // dizide 3 öğesinin olmadığını varsayıyoruz
Daha sonra, daha önce yaptığımız gibi bir if ile bir döngü başlatalım.
Eğer döngü dizide 3 öğesi olduğunu tespit ederse, flag
değişkenini true değerine ayarlayalım ve break
ile döngüden çıkalım:
<?php
$arr = [1, 2, 3, 4, 5];
$flag = false; // dizide 3 öğesinin olmadığını varsayıyoruz
foreach ($arr as $elem) {
if ($elem === 3) {
$flag = true; // öğe var - $flag değişkenini yeniden tanımla
break; // döngüden çık
}
}
?>
Dizide 3 olup olmadığı sorusunun cevabını yalnızca
döngüden sonra verebiliriz. Ve bu cevabı zaten elimizde var:
döngüden sonra flag değişkeni false olarak
kalabilir veya eğer döngü dizide 3 bulduysa değerini
true olarak değiştirmiş olabilir:
<?php
$arr = [1, 2, 3, 4, 5];
$flag = false;
foreach ($arr as $elem) {
if ($elem === 3) {
$flag = true;
break;
}
}
// burada $flag değişkeni ya true ya da false'dur
?>
Şimdi döngüden sonra, flag değişkenine bakacak
ve ekrana '+++' veya '---' yazdıracak
bir if yapabiliriz:
<?php
$arr = [1, 2, 3, 4, 5];
$flag = false;
foreach ($arr as $elem) {
if ($elem === 3) {
$flag = true;
break;
}
}
if ($flag === true) {
echo '+++';
} else {
echo '---';
}
?>
Bir dizi veriliyor:
<?php
$arr = ['a', 'b', 'c', 'd', 'e'];
?>
Bu dizide 'c' öğesinin olup olmadığını kontrol edin.
Varsa '+++' yazdırın, yoksa '---' yazdırın.
Bir sayının asal olup olmadığını kontrol eden kodu yazın. Asal sayı yalnızca bire ve kendisine bölünür, başka sayılara bölünmez.