(Bài tiếp) Mảng trong Php

Các vòng lặp trong php

Các vòng lặp (loop) được sử dụng nhằm mục đích thi khối lệnh nào đó nhiều lần. Trong Php cung cấp một số loại vòng lặp:

  • for : lặp lại một khối lệnh một số lần.
  • while : điều kiện kiểm tra vẫn là true lặp lại khối lệnh nếu
  • do ... while : thi hành khối lệnh rồi kiểm tra nếu điều kiện là true thì lặp lại
  • foreach lặp lại khối lệnh cho từng phần tử của một mảng, một Iterable

Trong vòng lặp cũng hay sử dụng lệnh breakcontinue, để điều hướng lại vòng lặp hoặc thoát lặp.

Vòng lặp for

Thường sử dụng vòng lặp for khi đã biết rõ số lần cần lặp lại, cú pháp lệnh for như sau:.

for (khởi_tạo; điều_kiện; cập_nhật)
{
    Code thi hành;
}

Như vậy vòng lặp for có ba tham số điều khiển lặp cách nhau bởi dấu ; Sự làm việc như sau:

  1. Khởi đầu thi hành biểu thức khởi_tạo (thường khởi tạo biến đếm lặp) nếu có
  2. Kiểm tra biểu thức điều_kiện (biểu thức logic), nếu là true thi hành khối lệnh { ... } , nếu false kết thúc lặp.
  3. Thi hành biểu thức cập_nhật (có thể là biểu thức bất kỳ, nhưng thường là tăng giảm bộ đếm), thực hiện lại bước 2 cho đến khi kết điều_kiệnfalse để kết thúc vòng lặp

Lưu ý việc viết ba biểu thức của for, không cận thận có thể dẫn đền vòng lặp vô tận. Các biểu thức này có thể thiếu nhưng các dấu ; khi vẫn có đầy đủ.

Ví dụ:

// Vòng lặp thiếu cả ba biểu thức, nó lặp vô tận
for (;;) { ... }

Ví dụ lặp lại khối lệnh 10 lần:

for ($i = 1; $i<=10; $i++) {
    echo "Vòng lặp thứ $i <br>";
}

Vòng lặp for còn có cách viết thay thế: xem khối lệnh thay thế for - endfor

Vòng lặp while

Với vòng lặp while thì bạn thường không xác định rõ số lặp (như tiếp tục đọc file khi chưa đến cuối), mà khối lệnh sẽ thi hành khi mà điều_kiện còn là true, cú pháp lệnh for như sau:

while (điều_kiện là true) {
    khối lệnh thi hành;
}

Ví dụ:

$i = 1;
while ($i < 5) {
  echo "Giá trị là $i <br />";
  $i++;
}

Đầu tiên gán $i là 1 ($i = 1). Sau đó lặp lại khối lệnh khi mà $i còn nhỏ hơn 5 ($i<5). Biến $i được tăng thêm một ($i++) mỗi lần khối lệnh thi hành.

Xem thêm dạng thay thế cho while

Vòng lặp do while

Với vòng lặp do ... while, khối lệnh sẽ thi hành ngày, sau đó kiểm tra điều kiện, nếu điều kiện đúng thì lại lặp lại khối lệnh. Cú pháp do ... while như sau:

do {
    khối lệnh thi hành // (luôn được thi hành ít nhất một lần);
}
while (điều_kiện);

Ví dụ: In ra màn hình giá trị của $i, sau đó tăng $i thêm một. Tiếp theo kiểm tra điều kiện, nếu điều kiện đúng ( $i nhỏ hơn hoặc bằng 5) thì lặp lại khối lệnh.

$i = 2;
do {
   echo "Số là " . $i . "<br/>";
   $i++;
} while($i <= 5);

Vòng lặp foreach

Vòng lặp foreach chỉ hoạt động dựa trên mảng (mảng PHP) hoặc trên các đối tượng triển khai từ giao diện Iterator của thư viện chuẩn. Với foreach nó lấy ra từng phần tử (gồm có giá trị và key), rồi thi hành khối lệnh.

Cú pháp 1 - chỉ lấy value khi duyệt qua mảng:

foreach ($array as $value) {
    // code_thực_hiện, làm gì đó với $value;
}

Cú pháp 2:

foreach ($array as $key => $value) {
    // code_thực_hiện; làm gì đó với $key và $value
}

Ví dụ in ra giá trị các phần tử của mảng:

$names = array("THUY", "LONG", "DAN");
foreach ($names as $name) {
    echo $name.'<br />';
}

Ví dụ: lấy cả key và value khi lặp

$params = ['a' => 1, 'b' => 10, 'c' => 100];
foreach ($params as $nameparam => $value)
{
    echo "Tham số $nameparam = $value <br>";
}
/*
Tham số a = 1
Tham số b = 10
Tham số c = 100
 */

Xem thêm dạng thay thế cho foreach

Sử dụng break

Lệnh break; được sử dụng trong các vòng lặp for, while, do while, foreach để ngắt ngay lập tức hoàn toàn vòng lặp (thoát ra khỏi vòng lặp). Nếu sử dụng break ngoài vòng lặp có thể dẫn đến kết thúc chương trình.

Ví dụ: Vòng lặp sau lặp vô tận nếu không có break; do gặp break nên nó kết thúc sau 5 lần lặp

for ($i=0;true;$i++)  {
  echo $i;
  if ($i== 5) {
    break;  // <--- thoát lặp for
  }
}

$i = 0;
while (true)  {
  echo $i;
  $i++;
  if ($i== 5) {
    break;  // <--- thoát lặp while
  }
}

Cũng có thể ra khỏi vòng lặp bằng lệnh nhảy code: goto

Sử dụng continue

Sử dụng lệnh continue trong vòng lặp để điều hướng, khi gặp continue; nó sẽ bỏ qua các lệnh còn lại của vòng lặp hiện tại và thực hiện ngay quy trình cho vòng lặp tiếp theo (nói cách khác, gặp continue là dịch chuyển tới cuối khối lặp {}).

Ví dụ sau chỉ in ra các số lẻ (vòng lặp gặp số chẵn sẽ bỏ qua).

for ($i=0; $i<10; $i++) {
  if ($i%2==0) {
    continue;   // gặp continue; coi như đã hoàn thành một lần lặp; bắt đầu lần lặp mới
  }
  echo $i . ' ';
}

Ví dụ: Hãy lấy ra 10 số ngẫu nhiên có giá trị > 1 và < 100 đồng thời chia hết cho 3

$ar = [];                           // mảng $ar không có phần tử nào (rỗng)
while (count($ar) < 10)
{

    $number = rand(1, 100);         // rand: lấy số ngẫu nhiên từ 1 - 100
    if ($number % 3 != 0)
        continue;                   // <--- Lặp lại ngay khi không chia hết cho 3
    if (in_array($number, $ar))
        continue;                   // <--- Lặp lại ngay khi số $number đã có trong mảng

    $ar[] = $number;                // <--- Đưa $number thêm vào mảng
}

// In kết quả (implode ~ nối chuỗi các phần tử mảng lại)
echo implode(',', $ar);

Đăng ký nhận bài viết mới
(Bài tiếp) Mảng trong Php