Pengendalian Bendera dalam PHP
Sekarang kita akan belajar mengendalikan bendera.
Bendera ialah pembolehubah khas yang
hanya boleh mengambil dua nilai: true
dan false. Dengan menggunakan bendera, kita boleh menyelesaikan
tugas yang memeriksa ketiadaan sesuatu:
contohnya, kita boleh memeriksa sama ada dalam array
tiada elemen dengan nilai tertentu. Mari
kita mulakan.
Mari selesaikan tugas berikut: diberikan array
dengan nombor, perlu disemak sama ada ia mengandungi
elemen dengan nilai 3 atau tidak. Jika
ada - paparkan '+++', jika tidak -
paparkan '---'.
Sebagai permulaan, mari cuba paparkan '+++'.
Untuk melakukan ini, kita akan ulangi semua elemen array kita
dan dengan *if* kita akan bertanya - adakah elemen semasa
sama dengan nilai 3. Jika ya - paparkan
'+++':
<?php
$arr = [1, 2, 3, 4, 5];
foreach ($arr as $elem) {
if ($elem === 3) {
echo '+++';
}
}
?>
Tetapi penyelesaian kami tidak begitu baik: kerana jika
dalam array bukan hanya satu nilai 3,
tetapi beberapa, maka '+++' akan dipaparkan beberapa
kali. Mari betulkan array kami (buat
dua elemen dengan nilai 3) dan pastikannya:
<?php
$arr = [1, 2, 3, 4, 3, 5];
foreach ($arr as $elem) {
if ($elem === 3) {
echo '+++'; // akan memaparkan beberapa kali
}
}
?>
Mari betulkan masalah ini: hentikan gelung menggunakan
break, jika elemen sudah ditemui:
<?php
$arr = [1, 2, 3, 4, 3, 5];
foreach ($arr as $elem) {
if ($elem === 3) {
echo '+++';
break; // hentikan gelung
}
}
?>
Sekarang mari cuba lakukan supaya,
jika dalam array tiada langsung elemen dengan nilai
3, '---' dipaparkan. Kesilapan biasa
ialah menambah else kepada
*if* kami - dalam kes ini '---' akan
dipaparkan untuk semua elemen yang bukan
3:
<?php
$arr = [1, 2, 3, 4, 5];
foreach ($arr as $elem) {
if ($elem === 3) {
echo '+++'; // akan dipaparkan pada elemen 3
} else {
echo '---'; // akan dipaparkan pada elemen 1, 2, 4, 5
}
}
?>
Jadi, idea untuk menambah else - adalah idea yang
tidak baik, tidak berfungsi. Untuk menyelesaikan tugas jenis
seperti ini (tugas seperti ini berlaku agak
kerap) apa yang dipanggil bendera digunakan.
Seperti yang disebutkan di atas, bendera ialah
pembolehubah sedemikian yang boleh mengambil dua nilai:
true atau false.
Jadi, mari buat pembolehubah flag
dengan nilai sedemikian: jika ia sama dengan true,
maka dalam array ada elemen 3, dan jika
false, maka tiada elemen sedemikian.
Pada mulanya, letakkan pembolehubah flag
kepada nilai false - iaitu kita akan menganggap
bahawa elemen 3 tiada dalam array:
$arr = [1, 2, 3, 4, 5];
$flag = false; // menganggap bahawa elemen 3 tiada dalam array
Kemudian jalankan gelung dengan *if* seperti yang kami lakukan
sebelum ini. Jika gelung mengesan bahawa dalam array
ada elemen 3 - maka letakkan pembolehubah flag
kepada nilai true dan keluar dari gelung
dengan break:
<?php
$arr = [1, 2, 3, 4, 5];
$flag = false; // menganggap elemen 3 tiada dalam array
foreach ($arr as $elem) {
if ($elem === 3) {
$flag = true; // elemen ada - takrif semula pembolehubah $flag
break; // keluar dari gelung
}
}
?>
Jawapan kepada soalan, sama ada dalam array ada 3
atau tidak, kita hanya boleh berikan selepas gelung.
Dan jawapan ini sudah ada pada kami: selepas gelung
pembolehubah flag mungkin kekal false
atau mungkin telah menukar nilainya kepada true,
jika gelung mengesan dalam array 3:
<?php
$arr = [1, 2, 3, 4, 5];
$flag = false;
foreach ($arr as $elem) {
if ($elem === 3) {
$flag = true;
break;
}
}
// di sini pembolehubah $flag sama dengan true atau false
?>
Sekarang selepas gelung, kita boleh buat *if*, yang
akan melihat pembolehubah flag dan memaparkan
pada skrin '+++' atau '---':
<?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 '---';
}
?>
Diberi array:
<?php
$arr = ['a', 'b', 'c', 'd', 'e'];
?>
Periksa sama ada dalam array ini ada elemen
'c'. Jika ada - paparkan '+++',
dan jika tidak - paparkan '---'.
Tulis kod yang akan memeriksa sama ada nombor itu perdana atau tidak. Nombor perdana hanya boleh dibahagi dengan satu dan dengan dirinya sendiri, dan tidak boleh dibahagi dengan nombor lain.