------
Phần 55.
Vòng lặp trong PHP
Đây là clip số 10: vòng lặp for
Các loại vòng lặp: for, while, do…while và for…each.
Đây là ví dụ về vòng lặp for,
<ol>
<?php
for($i
= 1; $i <= 10; $i++) {
echo
'<li> Học vòng lặp for </li>';
}
?>
</ol>
Đây là clip số 11: vòng lặp while
Vòng lặp while:
$i = 0;
while ($i < 10) {
echo 'Lần lặp thứ ' .
$i . '<br>';
$i++;
}
Từ clip trên, suy nghĩ về hành động bấm nút trên giao diện
và xuất tam giác: việc bấm nút được thực hiện trên giao diện tại web client,
nghĩa là đang tác động vào một đối tượng DOM tại máy client. Trong khi việc
kiểm tra xem người dùng đã bấm vào nút nào và xuất tam giác thì lại do đoạn mã
tại web server thực hiện. À vậy là phải có một cách gì đó để trao đổi, liên lạc
giữa web client và web server.
Cách liên lạc là: web client sẽ quy ước, mỗi nút sẽ ứng với
một số, và web client sẽ gửi nút đã được chọn thông qua tham số type của thẻ
<a>, sau đó web server sẽ kiểm tra tham số type này trong mảng $_GET, tại
phần tử $_GET[‘type’]. Thực chất ở đây là dùng phương thứ GET để gửi dữ liệu.
Ví dụ,
<ul>
<a
href="for.php?type=1"><li>Tam giác 1</li></a>
<a
href="for.php?type=2"><li>Tam giác 2</li></a>
<a
href="for.php?type=3"><li>Tam giác 3</li></a>
</ul>
Hàm str_repeat(‘kí tự’, ‘số lần lặp’) để xuất lặp lại một kí
tự.
Đây là clip số 12: vòng lặp while (tiếp theo)
Đây là mã của chương trình in tam giác, lưu lại để tham
khảo:
<!DOCTYPE html>
<html>
<head>
<meta
charset="utf-8">
<title>PHP</title>
<style>
* {
margin: 0;
padding: 0;
}
.content {
width: 600px;
height: 400px;
border: 1px solid green;
margin: 20px auto;
text-align: center;
}
h1 {
text-align: center;
padding: 10px 0;
color: red;
}
.tam-giac {
width: 100px;
height: 100px;
border: 2px solid red;
display: inline-block;
margin-left: 10px;
}
img {
width: 100%;
height: 100%;
}
.result {
text-align: left;
margin-left: 265px;
}
</style>
</head>
<body>
<div
class="content">
<h1>Vẽ tam
giác</h1>
<div
class="tam-giac"><a href="?type=1"><img
src="tam-giac-1.jpg" alt=""></a></div>
<div
class="tam-giac"><a href="?type=2"><img
src="tam-giac-2.jpg" alt=""></a></div>
<div
class="tam-giac"><a href="?type=3"><img
src="tam-giac-3.jpg" alt=""></a></div>
<div
class="result">
<?php
$result = '';
if
(isset($_GET['type'])) {
$type =
$_GET['type'];
switch ($type) {
case '1':
$i = 1;
while($i <= 6) {
$result .= str_repeat('*',
$i) . '<br>';
$i++;
}
break;
case '2':
$i = 6;
while($i >= 1) {
$result .=
str_repeat('*', $i) . '<br>';
$i--;
}
break;
case '3':
$i = 1;
while($i <= 6) {
$space =
str_repeat(' ', 6 - $i);
$character =
str_repeat('*', 2*$i - 1);
$result .= $space
. $character . '<br>';
$i++;
}
break;
default:
break;
}
}
echo $result;
?>
</div>
</body>
</html>
Đây là clip số 13: vòng lặp do – while
Ví dụ,
$i = 10;
do {
echo 'Chạy ít nhất
một lần!';
$i++;
} while ($i <= 5);
Đây là mã của chương trình hiển thị hình ảnh, lưu lại để
tham khảo:
<!DOCTYPE html>
<html>
<head>
<meta
charset="utf-8">
<title>PHP</title>
<style>
* {
margin: 0;
padding: 0;
}
.content {
width: 600px;
height: 400px;
border: 1px solid green;
margin: 20px auto;
text-align: center;
}
h1 {
text-align: center;
padding: 10px 0;
color: red;
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta
charset="UTF-8">
<title>Document</title>
<style>
.content {
width: 300px;
margin: 0px auto;
border: 1px solid
#444;
text-align: center;
padding: 10px;
}
.content h1 {
color: red;
}
.content div.image {
margin: 20px 0px;
}
.content div.image img{
margin: 20px 0px;
}
.content div.image a {
display:
inline-block;
background: #994F82;
color: #FFFDD3;
padding: 3px 10px;
text-decoration:
none;
}
.content div.image
a:hover {
color: #9BCC61;
}
</style>
</head>
<body>
<div
class="content">
<h1>Xem
ảnh</h1>
<div
class="image">
<?php
$i = 1;
do {
echo '<img src="images/'
. $i . '.jpg">';
$flagShow = 0;
if(isset($_GET['show'])) {
$flagShow =
$_GET['show'];
$i++;
}
}while($i <= 10
&& $flagShow);
?>
<a
href="?show=1">Xem toàn bộ</a>
<a
href="?show=0">Xem một hình</a>
</div>
</div>
</body>
</html>
Đây là clip số 14: break và continue, sự khác nhau giữa nháy
đơn và nháy kép
- break: thoát khỏi một vòng lệnh, sử dụng để nhảy ra khỏi
một vòng lặp.
Ví dụ,
// in 10 số chẵn đầu tiên
$i = 1;
$n = 0;
while (1) {
if ($i % 2 == 0
&& $n < 10) {
echo $i .
'<br>';
$n++;
} else if ($n == 10) {
break;
}
$i++;
}
- continue: dừng vòng lặp tại giá trị đó và nhảy sang giá
trị khác trong vòng lặp.
Ví dụ,
// in 10 số chẵn đầu tiên
for ($i = 1; $i <= 20;
$i++) {
if ($i % 2 != 0) {
continue;
}
echo $i . '<br>';
}
PHP xem chuỗi được bao bởi dấu nháy đơn là chuỗi tuyệt đối.
Với chuỗi được bao bởi dấu nháy đôi, PHP sẽ xử lý để tìm các biến trong chuỗi
để biên dịch. Do vậy, PHP xử lý chuỗi với dấu nháy đơn sẽ nhanh hơn. Chạy đoạn
mã sau để thấy sự khác biệt giữa chuỗi được bao bởi dấu nháy đơn và dấu nháy
đôi.
<?php
$a =
'bien a';
$b =
'bien b';
echo
"Giá trị của biến a: $a <br>";
echo
'Giá trị của biến b: $b';
?>
Đây là clip số 15: bài tập về vòng lặp (yêu nhau ghét nhau)
Lưu ý: bài giải của tác giả trong clip chưa chính xác. Gọi x
là số quả cau yêu, y là số quả cau ghét, thì sẽ hợp lý hơn, khi đó: 3x + 10y =
100 và x + y = 17. Kết quả là, số người yêu nhau là 30, số người ghét nhau là
70.
for ($x = 1; $x <= 17; $x++)
for ($y = 1; $y <=
17; $y++) {
if (3*$x + 10*$y ==
100 && $x + $y == 17) {
echo 3*$x . ' người
yêu nhau' . ':' . 10*$y . ' người ghét nhau';
}
}
-----------
Cập nhật [7/9/2020]
-----------