Bài đăng nổi bật

Vòng lặp

Một loại cấu trúc điều khiển khác rất hữu ích là một vòng lặp . Vòng lặp cho phép lặp đi lặp lại cùng một dòng mã. Hai loại vòng quan trọng là vòng lặp và vòng lặp. Hãy nhìn vào cách họ làm việc. for  while

Đối với vòng lặp

Các vòng lặp được sử dụng khi bạn biết lên phía trước bao nhiêu lần bạn cần phải chạy cùng mã. Hình ảnh dưới đây cho thấy dòng chảy của một vòng lặp: for  for
Luồng logic của một vòng lặp `for`

Luồng logic của một vòng lặp for
Đây là những gì nó trông giống như trong mã:
for (declare counter; condition; increment counter) {
statement(s) to execute repeatedly as long as condition is true
}
Câu lệnh truy cập khai báo được thực thi một lần khi bắt đầu vòng lặp. Câu lệnh điều kiện được kiểm tra mỗi lần qua vòng lặp trước khi các câu lệnh trong phần thân được thực thi. Câu lệnh bộ đếm tăng được thực hiện mỗi lần qua vòng lặp sau các câu lệnh trong phần thân. declare counter
Để đếm đến 10 bằng cách sử dụng vòng lặp, bạn có thể sử dụng mã sau: for
for ($count = 1; $count <= 10; $count++) {
echo $count . ' ';
}
Điều này có vẻ khá đáng sợ, vì có rất nhiều điều đang diễn ra, nhưng hãy để tôi giải thích cho bạn:
  •  $count = 1; : cái này đặt giá trị ban đầu của bộ đếm thành . 1
  •  $count <= 10; : đây là điều kiện Nó có thể được đọc là vòng lặp liên tục trong khi số đếm $ nhỏ hơn hoặc bằng 10 mệnh.
  •  $count++ : điều này nói rằng cộng thêm 1 vào bộ đếm mỗi lần. Nó giống hệt với . $count = $count + 1
  •  echo $count . ' '; : cái này in giá trị của bộ đếm theo sau là khoảng trắng.
Điều kiện trong ví dụ này sử dụng toán tử Điều này hoạt động tương tự như toán tử nhỏ hơn, nhưng đánh giá là đúng nếu số được so sánh nhỏ hơn hoặc bằng số thứ hai. Các toán tử khả dụng khác bao gồm (lớn hơn hoặc bằng) và (không bằng). <=  <  >=  !=
Như bạn có thể thấy, các câu lệnh khởi tạo và tăng biến được đặt với điều kiện trên dòng đầu tiên của vòng lặp. Mặc dù, thoạt nhìn, mã có vẻ khó đọc hơn một chút, việc đặt tất cả các mã liên quan đến việc kiểm soát vòng lặp ở cùng một nơi thực sự giúp bạn dễ hiểu hơn khi bạn đã sử dụng cú pháp. Nhiều ví dụ trong cuốn sách này sẽ sử dụng các vòng lặp, vì vậy bạn sẽ có nhiều cơ hội để thực hành đọc chúng. $count  for  for
Bạn có thể thay đổi từng phần của vòng lặp để có kết quả khác nhau. Ví dụ: đây là cách thêm 3 mỗi lần bạn có thể thay đổi vòng lặp: for  for
PHP-cho
for ($count = 1; $count <= 10; $count = $count + 3) {
echo $count . ' ';
}
Điều này sẽ dẫn đến kết quả như sau:
1 4 7 10
 for các vòng lặp có thể được kết hợp với các câu lệnh khác như các câu lệnh để thực hiện các tác vụ cụ thể trên mỗi lần lặp. Ví dụ, thay vì làm mới trang trên trò chơi súc sắc của chúng tôi mỗi lần, chúng tôi có thể muốn tung xúc xắc 10 lần và in kết quả: if
PHP-DiceRoll-ManyDice
for ($count = 1; $count <= 10; $count++) {
$roll = rand(1, 6);
echo '<p>You rolled a ' . $roll . '</p>';
if ($roll == 6) {
echo '<p>You win!</p>';
}
else {
echo '<p>Sorry, you didn\'t win, better
luck next time!</p>';
}
}
echo '<p>Thanks for playing</p>';
Điều này cho phép chúng ta cuộn xúc xắc 10 lần mà không cần phải làm mới trang mỗi lần. Sử dụng một vòng lặp có chức năng giống hệt nhau để sao chép / dán mã 10 lần và sẽ tạo ra kết quả chính xác như sau:
$roll = rand(1, 6);
echo '<p>You rolled a ' . $roll . '</p>';
if ($roll == 6) {
echo '<p>You win!</p>';
}
else {
echo '<p>Sorry, you didn't win, better luck
next time!</p>';
}
$roll = rand(1, 6);
echo '<p>You rolled a ' . $roll . '</p>';
if ($roll == 6) {
echo '<p>You win!</p>';
}
else {
echo '<p>Sorry, you didn't win, better luck next
time!</p>';
}
$roll = rand(1, 6);
echo '<p>You rolled a ' . $roll . '</p>';
if ($roll == 6) {
echo '<p>You win!</p>';
}
else {
echo '<p>Sorry, you didn't win, better luck next time!</p>';
}
// and so on …
Máy tính không quan tâm bạn sử dụng phương pháp nào, cho dù bạn sao chép / dán hoặc sử dụng vòng lặp. Nó sẽ chỉ chạy mã. Tuy nhiên, là một nhà phát triển, bạn sẽ nhanh chóng nhận ra rằng một vòng lặp là sự lựa chọn tốt hơn. Nếu bạn muốn cập nhật mã để cho phép 5 là số trúng, bạn cần cập nhật điều kiện ở 10 nơi khác nhau. Sử dụng một vòng lặp, bạn có thể thay đổi mã ở một nơi và nó sẽ ảnh hưởng đến mỗi lần lặp của vòng lặp. Nếu bạn thấy mình sao chép / dán mã, luôn có cách tốt hơn để đạt được những gì bạn đang cố gắng thực hiện.

Vòng lặp while

Một cấu trúc điều khiển PHP thường được sử dụng là vòng lặp. Trong trường hợp câu lệnh cho phép chúng ta chọn có thực thi một tập hợp các câu lệnh hay không tùy thuộc vào một số điều kiện, vòng lặp cho phép chúng ta sử dụng một điều kiện để xác định số lần chúng ta sẽ thực hiện một tập hợp các câu lệnh. while  if … else  while
Hình ảnh sau đây cho thấy cách một vòng lặp hoạt động: while
Luồng logic của một vòng lặp while
Luồng logic của một vòng lặp while
Đây là một vòng lặp trông như thế nào trong mã: while
while (condition) {
statement(s) to execute repeatedly as long as condition is true
}
Các vòng lặp hoạt động rất tương tự như một tuyên bố. Sự khác biệt phát sinh khi điều kiện là đúng và (các) câu lệnh được thực thi. Thay vì tiếp tục thực hiện với câu lệnh tuân theo dấu ngoặc nhọn ( ), điều kiện được kiểm tra lại. Nếu điều kiện vẫn đúng, (các) câu lệnh được thực thi lần thứ hai và lần thứ ba và sẽ tiếp tục được thực thi miễn là điều kiện vẫn đúng. Lần đầu tiên điều kiện đánh giá sai (cho dù đó là lần đầu tiên được kiểm tra hay lần thứ 101), việc thực thi sẽ ngay lập tức chuyển sang câu lệnh theo sau vòng lặp, sau dấu ngoặc đóng. while  if  }  while
Các vòng lặp như thế này có ích bất cứ khi nào bạn làm việc với danh sách dài các mặt hàng, nhưng bây giờ tôi sẽ minh họa bằng một ví dụ tầm thường, đếm đến mười:
PHP-WhileCount
while ($count <= 10) {
echo $count . ' ';
++$count;
}
Điều này hoạt động theo cách chính xác giống như một vòng lặp và bạn sẽ nhận thấy rất nhiều câu lệnh giống nhau ở những nơi khác nhau. Mã này có thể trông hơi đáng sợ, tôi biết, nhưng hãy để tôi nói với bạn qua từng dòng: for
  •  $count = 1; Dòng đầu tiên tạo một biến được gọi và gán cho nó một giá trị . $count  1
  •  while ($count <= 10) Dòng thứ hai là bắt đầu của một vòng lặp, điều kiện là giá trị nhỏ hơn hoặc bằng ( ) đến 10. while  $count  <=
  •  { Dấu ngoặc mở đánh dấu sự bắt đầu của khối mã có điều kiện cho vòng lặp. Mã điều kiện này thường được gọi là phần thân của vòng lặp và được thực thi lặp đi lặp lại, miễn là điều kiện đúng. while
  •  echo $count . ' '; Dòng này chỉ đơn giản là đầu ra giá trị của , theo sau là khoảng trắng. $count
  •  ++$count; Dòng thứ tư thêm một vào giá trị của là một phím tắt cho cũng sẽ làm việc ở đây! Vị trí của có thể quan trọng, nhưng trong trường hợp này nó không quan trọng. Nếu là trước tên biến, bộ đếm được tăng lên trước khi giá trị được đọc. Khi bằng 0, mã sẽ in , trong khi sẽ in Hãy cẩn thận khi sử dụng , vì đặt nó ở sai vị trí có thể gây ra lỗi. $count  ++$count  $count = $count + 1  $count++  ++  ++  $count  echo ++$count;  1  echo $count++;  0  ++
  •  } Cú đúp kết thúc đánh dấu sự kết thúc của cơ thể Vòng lặp. while
Vì vậy, đây là những gì xảy ra khi mã này được thực thi. Lần đầu tiên điều kiện được kiểm tra, giá trị của là , vì vậy điều kiện này hoàn toàn đúng. Giá trị của ) là đầu ra và được đưa ra một giá trị mới là Điều kiện vẫn đúng trong lần thứ hai được kiểm tra, vì vậy giá trị ( ) là đầu ra và giá trị mới ( ) được gán. Quá trình này tiếp diễn, xuất ra các giá trị , và Cuối cùng, được đưa ra một giá trị và điều kiện được tìm thấy là false, kết thúc vòng lặp. $count  1  $count  1  $count  2  2  3  3  4  5  6  7  8  9  10  $count  11
Kết quả thực của mã được hiển thị trong hình ảnh sau:
Kết quả thực của mã vòng lặp while
Kết quả thực của mã vòng lặp while
Mặc dù các vòng lặp thường không được sử dụng cho các bộ đếm đơn giản như thế này, thường là công việc của vòng lặp. Mặc dù bạn có thể tạo một bộ đếm với một vòng lặp, thông thường chúng được sử dụng để tiếp tục chạy mã cho đến khi có điều gì đó xảy ra. Ví dụ, chúng tôi có thể muốn tiếp tục gieo xúc xắc cho đến khi chúng tôi nhận được sáu. Không có cách nào để biết có bao nhiêu cuộn xúc xắc sẽ cần thiết khi chúng ta viết mã: có thể mất một cuộn hoặc hàng trăm để có được sáu. Vì vậy, bạn có thể đặt cuộn súc sắc trong một vòng lặp: for  while  while
PHP-DiceRoll-While
$roll = 0;
while ($roll != 6) {
$roll = rand(1, 6);
echo '<p>You rolled a ' . $roll . '</p>';
if ($roll == 6) {
echo '<p>You win!</p>';
}
else {
echo '<p>Sorry, you didn\'t win, better luck
next time!</p>';
}
}
Điều này sẽ tiếp tục gieo xúc xắc cho đến khi 6 được lăn. Mỗi lần bạn chạy mã, nó sẽ lấy một số cuộn khác nhau trước khi bạn giành chiến thắng.
Câu lệnh while sử dụng điều kiện Để vòng lặp được chạy lần đầu tiên, biến phải được đặt thành giá trị để so sánh ban đầu. Đó là mục đích của dòng trên vòng lặp. Bằng cách đặt giá trị về 0 ban đầu, khi vòng lặp chạy lần đầu tiên, sẽ đánh giá thành đúng (vì bằng 0, không phải 6!) Và vòng lặp sẽ bắt đầu. Nếu không có dòng này, bạn sẽ gặp lỗi, vì biến này chưa được đặt thành bất cứ thứ gì trước khi nó được sử dụng. $roll != 6  while  $roll  $roll = 0;  while  while  while ($roll != 6)  $roll  $roll
Có một biến thể của vòng lặp được gọi là hữu ích trong các trường hợp này. Nó cho phép bạn chạy một số mã mà không cần điều kiện và sau đó chạy lại nếu mã không được đặt. Điều này có cấu trúc sau: while  do … while
do {
statement(s) to execute and then repeat if the condition is true
}
while (condition);
Đối với ví dụ cuộn xúc xắc ở trên, điều này cho phép bạn bỏ qua dòng đầu tiên:
PHP-DiceRoll-DoWhile
do {
$roll = rand(1, 6);
echo '<p>You rolled a ' . $roll . '</p>';
if ($roll == 6) {
echo '<p>You win!</p>';
}
else {
echo '<p>Sorry, you didn\'t win, better luck next time!</p>';
}
}
while ($roll != 6);
Lần này, vì điều kiện ở dưới cùng, vào thời điểm câu lệnh được chạy, biến đã được đưa ra một giá trị, vì vậy bạn không cần cung cấp cho nó một giá trị ban đầu bằng 0 để buộc vòng lặp chạy lần đầu tiên . while  $roll

PSR-2

PHP không quan tâm đến cách bạn định dạng mã và khoảng trắng của bạn bị bỏ qua. Bạn có thể diễn tả ví dụ trước là:
do {
$roll = rand(
1,
6);
echo '<p>You rolled a ' .
$roll . '</p>';
if (
$roll == 6
)
{
echo '<p>You win!</p>';
}
else
{
echo '<p>Sorry, you didn\'t win, better luck next
time!</p>';
}
}
while ($roll != 6);
Kịch bản sẽ thực hiện theo cách chính xác. Các lập trình viên khác nhau có các kiểu ưa thích khác nhau, chẳng hạn như sử dụng các tab hoặc khoảng trắng để thụt lề hoặc đặt dấu ngoặc mở trên cùng một dòng với câu lệnh hoặc sau nó. Trong suốt cuốn sách này, tôi sẽ sử dụng một quy ước được gọi là PSR-2 nhưng sử dụng bất kỳ phong cách nào bạn cảm thấy thoải mái nhất.

Post a Comment

Mới hơn Cũ hơn