Hướng dẫn bài tập function php

  • Trang chủ
  • Hướng dẫn học
  • Học PHP
  • PHP function

Định nghĩa và cách dùng PHP function

PHP function (thường gọi là hàm), có rất nhiều hàm khác nhau được khai báo sẵn trong php, chúng ta chỉ việc gọi và sử dụng, tuy nhiên chúng ta cũng có thể viết những hàm dành riêng cho một tính năng bất kỳ nào đó.

  • Điểm mạnh của function là khả năng tái sử dụng nhiều lần.
  • Function sẽ không thực thi khi load trang, mà được thực thi thông qua việc gọi chúng.

Cấu trúc

Code được thực thi;
}
tên_hàm(); // Gọi function
?>

  • tên_hàm có thể dùng chữ hoặc số, viết thường hay viết hoa, dấu gạch dưới, tuy nhiên chữ cái đầu không được là số.
  • Cách gọi function khá đơn giản, chỉ cần viết lại tên_hàm() là được.

Ví dụ

PHP không phân biệt gọi hàm trước và sau khai báo function, cả 2 cách gọi là như nhau.
Cách gọi trên tương tự như sau:

PHP function và đối số

  • Đối số cũng được xem là biến số, được dùng để truyền giá trị vào function.
  • Được viết trong dấu ngoặc đơn ngay sau tên_hàm.
  • Một function có thể khai báo nhiều đối số tùy ý, và mỗi đối số được viết cách nhau bởi dấu phẩy.
  • Khi fucntion được gọi, thì với đối số khác nhau sẽ cho ta kết quả khác nhau.

PHP function với 1 đối số

";
}
myFunction("Nguyễn Văn Tý");
myFunction("Trần Văn Tèo");
?>

Nguyễn Văn Tý
Trần Văn Tèo

PHP function với 2 đối số

";
}
myFunction("Nguyễn Văn Tý", 25);
myFunction("Trần Văn Tèo", 19);
?>

Nguyễn Văn Tý - 25 tuổi
Trần Văn Tèo - 19 tuổi

PHP function với đối số mặc định

Khi sử dụng đối số với phép gán bằng, sẽ cho ta dạng đối số mặc định, khi gọi function mà không truyền đối số sẽ cho ta đối số mặc định.

";
}
myFunction("Nguyễn Văn Tý");
myFunction("Trần Văn Tèo");
myFunction(); // Cách gọi sau sẽ được truyền đối số mặc định.
?>

Nguyễn Văn Tý
Trần Văn Tèo
Học Web Chuẩn

PHP function - return giá trị

Để trả về giá trị nào đó của một function, ta sử dụng câu lệnh return.

Ví dụ

Ta thấy điều kiện lặp sẽ dừng lại khi $a lớn hơn 5 hoặc $b nhỏ hơn 3, chỉ cần 1 điều kiện đúng thì biểu thức bên dưới vẫn được thực thi.

PHP function - Hàm lồng nhau

Ví dụ



Bài này cung cấp cho bạn danh sách các bài tập PHP có lời giải ở các cấp độ như sau:

  1. Bài tập PHP cơ bản.
  2. Bài tập xử lý chuỗi.
  3. Bài tập mảng.
  4. Bài tập biểu thức chính quy (Regular Expression).
  5. Bài tập Datetime.
  6. Bài tập Webservice.
  7. Bài tập nâng cao quản lý bán hàng.


Bài tập PHP cơ bản

Bài 01: Sử dụng dấu * để vẽ tam giác trong PHP, đây là một trong những bài cơ bản nhất giúp bạn thực hành cách sử dụng các vòng lặp trong PHP.

Gợi ý:

  • Sử dụng vòng lặp for
  • Sử dụng vòng lặp do-while
  • Sử dụng vòng lặp while

Code mẫu: sử dụng vòng lặp for

// sử dụng vòng lặp for - vẽ tam giác trong PHP, 
// mỗi dấu * là một đơn vị
";
}
?>

Kết quả:

// sử dụng vòng lặp for - vẽ tam giác trong PHP, 
// mỗi dấu * là một đơn vị 
*
**
***
****
*****
******
*******
********
*********
**********
***********
************
*************
**************
***************
****************
*****************
******************
*******************


Bài 02: Sử dụng dấu * để vẽ hình chữ nhật trong PHP, đây là một trong những bài cơ bản nhất giúp bạn thực hành cách sử dụng các vòng lặp trong PHP.

Gợi ý:

  • Sử dụng vòng lặp for
  • Sử dụng vòng lặp do-while
  • Sử dụng vòng lặp while

Code mẫu: sử dụng vòng lặp for

// sử dụng vòng lặp for - vẽ hình chữ nhật trong PHP, 
// mỗi dấu * là một đơn vị
";
    for($j = 0; $j < 20; $j ++) {
        echo "*";
    }
}
?>

Kết quả:

// sử dụng vòng lặp for - vẽ hình chữ nhật trong PHP, 
// mỗi dấu * là một đơn vị 
********************
********************
********************
********************
********************
********************
********************
********************
********************
********************


Bài 03: Viết một chương trình để in ra các số từ 1 đến 100. Nhưng đối với các số chia hết cho 3 thì in ra chữ “Fizz” thay vì hiển thị số đó và đối với các số chia hết cho 5 thì in ra chữ “Buzz”. Đối với các số vừa chia hết cho 3 và 5 thì in ra chữ “FizzBuzz”.

Gợi ý:

  1. Lặp i từ 1 đến 100.
  2. Kiểm tra nếu i chia hết cho 3 và 5 thì in ra "FizzBuzz".
  3. Kiểm tra nếu i chia hêt cho 3 thì in ra "Fizz".
  4. Kiểm tra nếu i chia hêt cho 5 thì in ra "Buzz".

Code mẫu:

";
    } else if ($i % 3 == 0) {
        echo "Fizz $i" . "
"; } else if ($i % 5 == 0) { echo "Buzz $i" . "
"; } } ?>

Kết quả:

Fizz 3
Buzz 5
Fizz 6
Fizz 9
Buzz 10
Fizz 12
FizzBuzz 15
Fizz 18
...
FizzBuzz 75
Fizz 78
Buzz 80
Fizz 81
Fizz 84
Buzz 85
Fizz 87
FizzBuzz 90
Fizz 93
Buzz 95
Fizz 96
Fizz 99
Buzz 100


Bài 04: Viết chương trình để in ra bảng cửu chương trong PHP.

Code mẫu:


";
    for($j = 1; $j <= 10; $j ++) {
        echo "$i x $j = " . ($i * $j);
        echo "
"; } echo ""; } ?>

Kết quả:


Bài 05: Viết chương trình giải phương trình bậc 2: ax2 + bx + c = 0.

Code mẫu:

";
    // kiểm tra các hệ số
    if ($a == 0) {
        if ($b == 0) {
            echo ("Phương trình vô nghiệm!");
        } else {
            echo ("Phương trình có một nghiệm: " . "x = " . (- $c / $b));
        }
        return;
    }
    // tính delta
    $delta = $b * $b - 4 * $a * $c;
    $x1 = "";
    $x2 = "";
    // tính nghiệm
    if ($delta > 0) {
        $x1 = (- $b + sqrt ( $delta )) / (2 * $a);
        $x2 = (- $b - sqrt ( $delta )) / (2 * $a);
        echo ("Phương trình có 2 nghiệm là: " . "x1 = " . $x1 . " và x2 = " . $x2);
    } else if ($delta == 0) {
        $x1 = (- $b / (2 * $a));
        echo ("Phương trình có nghiệm kép: x1 = x2 = " . $x1);
    } else {
        echo ("Phương trình vô nghiệm!");
    }
}
?>
Hệ số bậc 2, a
Hệ số bậc 1, b
Hệ số tự do, c

Kết quả:

Chú ý: Trong ví dụ trên hàm is_numeric() được sử dụng về xác thực giá trị đầu vào phải là một số thực.


Bài 06: Viết chương trình tính giai thừa của n. Giai thừa của 1 số là tích các số liên tiếp từ 1 đến số đó. Trường hợp đặc biệt, giai thừa của 0 và 1 là 1.

Ví dụ: giai thừa của 5 là 1*2*3*4*5 = 120

Gợi ý:

  • Tính giai thừa không sử dụng đệ quy.
  • Tính giai thừ có sử dụng đệ quy.

Code mẫu: Tính giai thừa không sử dụng đệ quy

");
echo ("Giai thừa của " . $b . " là: " . tinhGiaithua ( $b ) . "
"); echo ("Giai thừa của " . $c . " là: " . tinhGiaithua ( $c ) . "
"); ?>

Kết quả:

Giai thừa của 5 là: 120
Giai thừa của 0 là: 1
Giai thừa của 10 là: 3628800


Bài 07: Tính dãy số Fibonacci trong PHP.

Gợi ý:

  • Tính dãy số Fibonacci không dùng phương pháp đệ quy.
  • Tính dãy số Fibonacci sử dụng phương pháp đệ quy.

Code mẫu: Tính dãy số Fibonacci không dùng phương pháp đệ quy

Kết quả:

10 số đầu tiên của dãy số fibonacci: 0 1 1 2 3 5 8 13 21 34


Bài 08: Kiểm tra số nguyên tố trong PHP.

Định nghĩa: số nguyên tố là số lớn hơn 1 và chỉ chia hết cho 1 và chính nó.

Ví dụ: 2, 3, 5, 7, 11, 13, 17, … là những số nguyên tố.

Code mẫu:

= 2
    $squareRoot = sqrt ( $n );
    for($i = 2; $i <= $squareRoot; $i ++) {
        if ($n % $i == 0) {
            return false;
        }
    }
    return true;
}

echo ("Các số nguyên tố nhỏ hơn 100 là: 
"); for($i = 0; $i < 100; $i ++) { if (isPrimeNumber ( $i )) { echo ($i . " "); } } ?>

Kết quả:

Các số nguyên tố nhỏ hơn 100 là: 
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97


Bài 09: Viết chương trình chuyển đổi một số tự nhiên ở hệ số 10 thành một số ở hệ cơ số B (1 <= B <= 32) bất kỳ.

Code mẫu: Ví dụ chuyển đối hệ cơ số 10 sang hệ cơ số B

Giả sử hệ cơ số cần chuyển là 2 <= B <= 16. Số đại điện cho hệ cơ số B > 10 là A = 10, B = 11, C = 12, D = 13, E = 14, F = 15.

Chúng ta tạo ra một chương trình như sau để chuyển đổi hệ cơ số trong PHP:

 16 ) {
        return "";
    }
    
    $result = "";
    $m = 0;
    $remainder = $n;
    
    while ($remainder > 0) {
        if ($b > 10) {
            $m = $remainder % $b;
            if ($m >= 10) {
                $result = $result . chr (55 + $m);
            } else {
                $result = $result . $m;
            }
        } else {
            $result = $result . ($remainder % $b);
        }
        $remainder = floor($remainder / $b);
    }
    return strrev($result);
}

// ví dụ chuyển đổi số 30 (hệ số 10) sang hệ cơ số 2 và 16
$n = 30;
echo ("So " . $n . " trong he co so 2 = " . convertNumber($n, 2) . "
"); echo ("So " . $n . " trong he co so 16 = " . convertNumber($n, 16)); // ví dụ chuyển đổi số 15 (hệ số 10) sang hệ cơ số 2 và 16 $n = 15; echo ("So " . $n . " trong he co so 2 = " . convertNumber($n, 2) . "
"); echo ("So " . $n . " trong he co so 16 = " . convertNumber($n, 16)); ?>

Kết quả:

So 30 trong he co so 2 = 11110
So 30 trong he co so 16 = 1E
So 15 trong he co so 2 = 1111
So 15 trong he co so 16 = F


Bài 10: Viết chương trình tìm ước số chung lớn nhất (UCLN) và bội số chung nhỏ nhất (BCNN) của hai số a và b.

Gợi ý:

  • Sử dụng giải thuật Euclid.

Code mẫu:

";
// tính BSCNN của a và b
echo ("BSCNN của $a và  $b là: " . BSCNN($a, $b));
?>

Kết quả:

USCLN của 15 và 40 là: 5
BSCNN của 15 và 40 là: 120


Bài 11: Viết chương trình liệt kê tất cả các số nguyên tố nhỏ hơn n.

Code mẫu:

= 2
    $squareRoot = sqrt($n);
    for ($i = 2; $i <= $squareRoot; $i++) {
        if ($n % $i == 0) {
            return false;
        }
    }
    return true;
}

$n = 100;
echo ("Tất cả các số nguyên tố nhỏ hơn $n là: 
"); if ($n >= 2) { echo "2"; } for ($i = 3; $i < $n; $i+=2) { if (isPrimeNumber($i)) { echo (" " . $i); } } ?>

Kết quả:

Nhập n = 100
Tất cả các số nguyên tố nhỏ hơn 100 là: 
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97


Bài 12: Viết chương trình liệt kê n số nguyên tố đầu tiên.

Code mẫu:

= 2
    $squareRoot = sqrt($n);
    for ($i = 2; $i <= $squareRoot; $i++) {
        if ($n % $i == 0) {
            return false;
        }
    }
    return true;
}

echo ("Liệt kê 10 số nguyên tố đầu tiên: ");
$n = 10;
$dem = 0; // đếm số số nguyên tố
$i = 2;   // tìm số nguyên tố bắt dầu từ số 2
while ($dem < $n) {
    if (isPrimeNumber($i)) {
        echo ($i . " ");
        $dem++;
    }
    $i++;
}
?>

Kết quả:

Nhập n = 10
Liệt kê 10 số nguyên tố đầu tiên: 2 3 5 7 11 13 17 19 23 29


Bài 13: Viết chương trình liệt kê tất cả các số nguyên tố có 5 chữ số.

Code mẫu:

= 2
    $squareRoot = sqrt($n);
    for ($i = 2; $i <= $squareRoot; $i++) {
        if ($n % $i == 0) {
            return false;
        }
    }
    return true;
}

$count = 0;
echo ("Liệt kê tất cả số nguyên tố có 5 chữ số:
"); for ($i = 10001; $i < 99999; $i+=2) { if (isPrimeNumber($i)) { echo ($i . "
"); $count++; } } echo ("Tổng các số nguyên tố có 5 chữ số là: $count"); ?>

Kết quả:

Liệt kê tất cả số nguyên tố có 5 chữ số:
10007
10009
10037
...
99971
99989
99991
Tổng các số nguyên tố có 5 chữ số là: 8363


Bài 15: Nhập số tự nhiên n. Hãy liệt kê các số Fibonacci nhỏ hơn n là số nguyên tố.

Code mẫu:

= 2
    $squareRoot = sqrt ( $n );
    for($i = 2; $i <= $squareRoot; $i ++) {
        if ($n % $i == 0) {
            return false;
        }
    }
    return true;
}

$n = 1000;
echo ("Các số fibonacci nhỏ hơn $n và là số nguyên tố: ");
$i = 0;
while (fibonacci($i) < $n) {
    $fi = fibonacci($i);
    if (isPrimeNumber($fi)) {
        echo ($fi . " ");
    }
    $i++;
}
?>

Kết quả:

Các số fibonacci nhỏ hơn 1000 và là số nguyên tố: 2 3 5 13 89 233


Bài 15: Viết chương trình phân tích số nguyên n thành các thừa số nguyên tố. Ví dụ: 12 = 2 x 2 x 3.

Code mẫu:

 1 ) {
        if ($n % $i == 0) {
            $n = floor ( $n / $i );
            $arrNumbers [$count] = $i;
            $count = $count + 1;
        } else {
            $i ++;
        }
    }
    // nếu listNumbers trống thì add n vào listNumbers
    if ($arrNumbers [0] == "") {
        $arrNumbers [0] = $n;
    }
    return $arrNumbers;
}

?>
Nhập số nguyên:

Kết quả:


Bài 16: Viết chương trình tính tổng các chữ số của một số nguyên n. Ví dụ: 1234 = 1 + 2 + 3 + 4 = 10.

Code mẫu:

 0 );
    return $total;
}

?>
Nhập số nguyên:

Kết quả:


Bài 17: Một số được gọi là số thuận nghịch nếu ta đọc từ trái sang phải hay từ phải sang trái số đó ta vẫn nhận được một số giống nhau. Ví dụ 123321 là một số thuận nghịch. Hãy liệt kê tất cả các số thuận nghịch có 6 chữa số.

Code mẫu:

 0 );
    // kiểm tra tính thuận nghịch
    $size = count ( $arrNumbers );
    for($i = 0; $i < ($size / 2); $i ++) {
        if ($arrNumbers [$i] != $arrNumbers [$size - $i - 1]) {
            return false;
        }
    }
    return true;
}

// Kiểm tra số thuận nghịch
$count = 0;
// in ra màn hình các số thuận nghịch có 4 chữ số
for($i = 1000; $i < 10000; $i ++) {
    if (isThuanNghich ( $i )) {
        echo ($i . "
"); $count ++; } } echo ("Tổng các số thuận nghịch có 6 chữ số: $count"); ?>

Kết quả:

1001
1111
1221
1331
1441
...
9559
9669
9779
9889
9999
Tổng các số thuận nghịch có 6 chữ số: 90


Các bài tập cơ bản khác:

  1. Viết chương trình nhập số nguyên dương n và thực hiện các chức năng sau:
    a) Tính tổng các chữ số của n.
    b) Phân tích n thành tích các thừa số nguyên tố.
    c) Liệt kê các ước số của n.
    d) Liệt kê các ước số là nguyên tố của n.
  2. Viết chương trình liệt kệ các số nguyên có từ 5 đến 7 chữ số thảo mãn:
    a) Là số nguyên tố.
    b) Là số thuận nghịch.
    c) Mỗi chữ số đều là số nguyên tố.
    d) Tổng các chữ số là số nguyên tố.
  3. Viết chương trình liệt kệ các số nguyên có 7 chữ số thảo mãn:
    a) Là số nguyên tố.
    b) Là số thuận nghịch.
    c) Mỗi chữ số đều là số nguyên tố.
    d) Tổng các chữ số là số thuận nghịch.

Bài tập xử lý chuỗi

  1. Nhập một sâu ký tự. Đếm số từ của sâu đó (mỗi từ cách nhau bởi một khoảng trắng có thể là một hoặc nhiều dấu cách, tab, xuống dòng). Ví dụ ” hoc java co ban den nang cao ” có 7 từ.
  2. Nhập một sâu ký tự. Liệt kê số lần xuất hiện của các từ của sâu đó.
  3. Nhập 2 sâu ký tự s1 và s2. Kiểm tra xem sâu s1 có chứa s2 không?.
  4. Tính độ dài của một chuỗi - strlen().
  5. Đảo ngược chuỗi - strrev().
  6. Tìm kiếm văn bản trong một chuỗi.
  7. Thay thế văn bản trong một chuỗi.
  8. Chuyển đổi chữ hoa, chữ thường.