Nội dung

Bài 18: Thuật toán sắp xếp chèn trong PHP

Nôi dung bao gồm:

  • Ý tưởng thuật toán
  • Cài đặt thuật toán

1. Ý tưởng thuật toán sắp xếp chèn

Ý tưởng thuật toán sắp xếp chèn như sau:

Trước hết chúng ta xem phần tử a[0] là một dãy đã có thứ tự.

1: Chèn phần tử a[1] vào dãy a[0] theo đúng vị trí. Sao cho dãy a[0] và a[1] được sắp xếp đúng thứ tự.

2: Chèn phần tử a[2] vào dãy a[0]. a[1] sao cho dãy a[0]. a[1], a[2] được sắp xếp đúng thứ tự.

Bước i: Chèn phần tử a[i] vào dãy a[o], a[1], a[2], …, a[i-1] sao cho dãy a[o], a[1], a[2], …, a[i-1], a[i] được sắp xếp đúng thứ tự.

Sau N-1 bước thì kết thúc (vì mảng có N-1 phần tử).

Lưu đồ thuật toán sắp xếp chèn:

ảnh mình họa

Ví dụ: Sắp xếp tăng dần dãy 5 – 1 – 3 – 4 – 6 – 8. (Phần màu xanh là phần đã sắp xếp).

1: Coi như phần tử thứ nhất là số 5 đã được sắp xếp. dãy lúc này như sau: 5 – 1 – 3 – 4 – 6 – 8.

2: Lấy phần tử thứ hai là số 1 gán vào đúng vị trí trong dãy 5. lúc này dãy như sau: 1 – 5 – 3 – 4 – 6 – 8.

3: Lấy phần tử thứ ba là số 3 gán vào đúng vị trí trong dãy 1 – 5. Lúc này dãy như sau: 1 – 3 – 5 – 4 – 6 – 8.

4: Lấy phần tử thứ tư là số 4 gán vào đúng vị trí trong dãy 1 – 3 – 5. Lúc này dãy như sau: 1 – 3 – 4 – 5 – 6 – 8.

5: Lấy phần tử thứ năm là số 6 gán vào đúng vị trí trong dãy 1 – 3 – 4 – 5. Lúc này dãy như sau: 1 – 3 – 4 – 5 – 6 – 8.

6: Lấy phần tử thứ sáu ( phần tử cuối cùng) gán vào đúng vị trí trong dãy 1 – 3 – 4 – 5 – 6. Lúc này dãy như sau: 1 – 3 – 4 – 5 – 6 – 8.

Kết thúc: kết quả đã được sắp xếp như sau: 1 – 3 – 4 – 5 – 6 – 8.

2. Cài đặt thuật toán sắp xếp chèn

Chúng ta đã được học bài xây dựng hàm trong PHP rồi nên tôi sẽ viết bài giải dưới dạng hàm nhé.

Sắp xếp tăng dần:

ảnh minh họa

Sắp xếp giảm dần:

Sắp xếp giảm dần cũng như tăng dần. Chỉ khác là ta đổi dấu điều kiện lặp trong vòng lặp while.

ảnh inh họa

Bài tiếp theo chúng ta sẽ học phương thức GET và POST trong học lập trình PHP căn bản phần 10.

Bài 19: Phương thức GET & POST trong PHP

Trải qua 18 bài chúng ta học toàn lý thuyết nên có vẻ hơi nhàm chán. Và để giảm căng thẳng thì chúng ta sẽ đi tìm hiểu một vài thứ hấp dẫn hơn.

Chính là phương thức truyền dữ liệu từ Client  lên Server.

Như bạn biết bộ mã nguồn web viết bằng PHP được đưa lên host và đó chính là Server. Còn khi các bạn truy cập sử dụng website thì bạn chính là một Client. Khi các bạn đăng nhập hay đăng ký tài khoản. Hoặc các bạn đăng comment thì dữ liệu sẽ được gửi từ client lên Server. Vậy làm sao để Server nhận được những thông tin của bạn? Server sẽ được thông qua hai phương thức POSTGET.

Có 2 cách gửi dữ liệu từ Client lên Server đó là khi ta dùng phương thức GET hoặc phương thức POST. Trừ khi là hacker :D. Để không mất thời gian nữa ta sẽ đi vào tìm hiểu từng cách. so sánh chúng với nhau. và bàn luận xem khi nào ta dùng POST và khi nào ta dùng GET nhé.

Nội dung bài học của chúng ta như sau:

  • Phương thức GET trong PHP.
  • Phương thức POST trong PHP.
  • So sánh giữa POST GET.

1. Phương thức GET trong PHP

Phương thức GET rất dễ nhận thấy đó là trên URL sẽ kèm theo dữ liệu mà chúng ta muốn gửi.

Client gửi lên

GET là phương thức gửi dữ liệu đi qua đường dẫn URL nằm trên thanh địa chỉ của Browser. Server được nhận đường dẫn đó và phân tích trả về kết quả cho bạn. Server sẽ phân tích tất cả những thông tin đằng sau dấu hỏi (?). chính là phần dữ liệu mà Client gửi lên.

Để truyền nhiều dữ liệu lên Server chúng ta dùng dấu & để phân cách giữa các cặp giá trị. Giả sử tôi muốn truyền id = 12và title = ‘method_get’. Thì URL sẽ có dạng freetuts.net?id=12&title=method_get. Lưu ý với các bạn là vị trí các cặp giá trị không quan trọng. Nghĩa là cặp title cũng có thể ở trước cặp id cũng được.

Server nhận dữ liệu

Tất cả các dữ liệu mà Client gửi lên bằng phương thức GET. Đều được lưu lại trong một biến toàn cục mà PHP tự tạo ra đó là biến $_GET. Biến này là kiểu mảng kết hợp lưu trữ danh sách dữ liệu từ client gửi lên theo quy luật key => value. Ví dụ với URL freetuts.net?id=12&title=method_get dữ liệu sẽ được lưu trong biến $_GET dưới dạng:

ảnh minh họa

Thực hành:

Bạn hãy tạo một file get.php nằm trong thư mục WWW của Vertrigo Server. hoặc thư mục htdocs của Xampp. Sau đó bạn copy đoạn code này vào:

ảnh minh họa

tiếp theo bạn ra trình duyệt gõ đường dẫn sau.< localhost/get.php?id=12&title=method_get >. và ngắm nhìn thành quả nhé. Bạn thử thay đổi hoặc thêm các giá trị xem có gì khác không.

Lưu ý quan trọng:

Trước lúc lấy một dữ liệu nào đó bạn phải kiểm tra tồn tại không không mới lấy nhé. Vì nếu bạn không kiểm tra đồng thời người dùng không truyền dữ liệu qua mà bạn lại nhận thì sẽ bị báo lỗi ngay. Để kiểm tra hãy dùng hàm isset($tenbien) trong php.

ảnh minh họa

2. Phương thức POST trong PHP

POST có tính bảo mật hơn vì dữ liệu gửi phải thông qua một form HTML nên nó bị ẩn. Nghĩa là chúng ta không thể thấy các giá trị đó được.

Client Gửi Lên

Ở Phương thức GET thì dữ liệu được thấy trên URL thì phương thức POST thì hoàn toàn ngược lại. POST sẽ gửi dữ liệu qua một cái form HTML. Các giá trị sẽ được định nghĩa trong các input gồm các kiểu.(textbox, radio, checkbox, password, textarea, hidden) & được nhận dang thông qua tên (name) của các input đó.

Server nhận dữ liệu

Các liệu gửi bằng phương thức POST đều được lưu trong một biến toàn cục $_POST. Do PHP tự tạo ra. vì vậy dữ liệu thì bạn chỉ cần lấy trong biến này là được. Cũng như lưu ý với các bạn là trước khi lấy phải dùng hàm isset($bien). Để kiểm tra có hay không nhé.

ảnh minh họa

Thực hành

1: Bạn tạo một file post.php nằm trong thư mục WWW của Vertrigo Server hay thư mục htdocs của Xampp, sau đó nhập đoạn code tạo form này vào:

ảnh minh họa

2:sau đó bạn mở trình duyệt gõ đường dẫn localhost/post.php. Và ngắm nghía cái form mình vừa tạo ra nhé.

3:

Bạn hãy sửa lại đoạn mã HTML đó bằng cách thêm vào một đoạn mã PHP như sau.

ảnh minh họa

4;Cuối cùng Bạn refresh lại trình duyệt rồi nhập tên đăng nhập và mật khẩu vào, sau đó nhấn vào button “Gửi Dữ Liệu” và nhìn thành quả của mình nhé.

ảnh minh họa

3. So sánh giữa POST và GET

Các bạn muốn hiểu rõ hơn về hai phương thức POST và GET thì chúng ta cùng so sánh một chút xíu.

Giống nhau:

Đều gửi dữ liệu lên Server.

Khác nhau:

Phương thức POST bảo mật hơn GET vì dữ liệu được gửi ngầm mắt thường không thể nhìn thấy được.

Phương thức GET dữ liệu được gửi tường minh, ta có thể thấy trên URL nên nó không bảo mật.

Phương thức GET luôn nhanh hơn POST vì dữ liệu gửi đi được Browser giữ lại trong cache. Khi thực thi với POST Server luôn được thực thi lệnh rồi trả về cho Client, còn với GET thì Browser sẽ kiểm tra trong cache có chưa, nếu có thì trả về ngay chứ không cần gửi lên Server.

Khi nào dùng GET – POST

Khi dữ liệu bạn muốn SEO thì phải sử dụng phương thức GET.

Bạn biết không nếu dữ liệu bạn không cần bảo mật thì bạn hãy sử dùng phương thức GET. Ngược lại dữ liệu bảo mật thì dùng phương thức POST.

Ví dụ khi đăng nhập. Comment, đăng tin dùng phương thức POST. Còn khi lấy tin ra thì dùng phương thức GET…

Khi request sử dụng câu lệnh select thì dùng GET. Khi request sử dụng lệnh insert update, delete thì nên dùng POST.

Bài 20: Các hàm xử lý chuỗi trong php

Việc xử lý chuỗi trong PHP rất là quan trọng. Vì dữ liệu hiển thị trên trang web luôn luôn ở dạng chuỗi. Vì thế nếu bạn nắm vững và xử lý nhuần nhuyễn thì sẽ giúp bạn ít tốn công sức. và thời gian hơn mà web chạy lại nhanh nữa & bên dưới đây tôi sẽ liệt kê các Hàm xử lý chuỗi trong php thông dụng hay sử dụng nhất. Tuy nhiên chúng ta nên hiểu một số quy tắc trong chuỗi trước đã.

Nội dung chính

  • 1. Quy tắc trong chuỗi
  • 2. Các hàm xử lý chuỗi hay sử dụng

1. Quy tắc trong chuỗi

Nếu chuỗi đặt trong dấu nháy kép "" thì các ký tự nháy kép " bên trong chuỗi phải. thêm dấu gạch chéo đằng trước nó.

Nếu chuỗi đặt trong dấu nháy kép thì trong chuỗi ta có thể truyền biến vào mà không cần dùng phép nối chuỗi.

Nếu chuỗi đặt trong dấu nháy đơn '' thì các ký tự nháy đơn ' bên trong chuỗi phải thêm dấu gạch chéo đằng trước nó.

2. Các hàm xử lý chuỗi hay sử dụng

Dưới đây là các hàm chúng ta hay sử dụng để xử lý chuỗi trong PHP.

addcslashes ($str, $char_list).

Hàm này ta thêm dấu gạch chéo (\) đằng trước những ký tự trong chuỗi $str. Mà ta liệt kê ở $char_list.

ảnh minh họa

explode ( $delimiter , $string)

Hàm này sẽ chuyển một chuỗi $string thành một mảng các phần tử với ký tự tách mảng là $delimiter.

ảnh minh họa

implode($delimiter, $piecesarray);

Hàm này ngược với hàm explode. Nó chuyển một mảng $piecesarray thành chuỗi và mỗi phần tử cách nhau bởi chuỗi $delimiter.

ảnh minh họa

ord ( $string )

Hàm này đã trả về mã ASCII của ký tự đầu tiên trong chuỗi $string.

ảnh minh họa

strlen($string)

Hàm này đếm tất cả ký tự của chuỗi $string.

ảnh minh họa

str_word_count($str)

Hàm này trả về số từ trong chuỗi $str.

ảnh minh họa

str_repeat(  $str,  int $n  )

Hàm này lặp chuỗi $str $n lần.

ảnh minh họa

str_replace( $chuoi_tim, $chuoi_thay_the, $chuoi_nguon )

Hàm này tìm kiếm và thay thế chuỗi.

ảnh minh họa

Để thay thế nhiều chuỗi chúng ta có thể dùng mảng để truyền vào.

1: $str = 'Freetuts Xin Chào Các Bạn';.
2: $str = str_replace( array('Freetuts', 'Xin Chào'), array('Freetuts.net', 'Hello'), $str );.
3: echo $str; // kết quả là Freetuts.net Hello Các Bạn.

md5( $str)

Hàm này mã hóa chuỗi thành một dãy 32 ký tự (mã hóa md5).

ảnh minh họa

sha1($string)

Hàm này mã hóa chuỗi thành một dãy 40 ký tự (mã hóa sha1).

ảnh minh họa

htmlentities($str)

Hàm này chuyển các thể html trong chuỗi $str sang  dạng thực thể của chúng (html sẽ ko còn tác dụng nên bạn có thể echo ra bên ngoài).

ảnh minh họa

html_entity_decode($string)

Ngược lại với htmlentities. Hàm này chuyển ngược các ký tự dạng thực thể HTML sang dạng ký tự của chúng.

ảnh minh họa

Tương tự như htmlentities.

htmlspecialchars_decode($string)

Tương tự như html_entity_decode.

strip_tags( $string, $allow_tags )

Hàm này bỏ các thẻ html trong chuỗi $string được khai báo ở $allow_tags.

ảnh minh họa

substr( $string,  $start, $length )

Hàm này lấy một chuỗi con nằm trong chuỗi $str bắt đầu từ ký tự thứ $start và chiều dài $length.

anh minh họa

strstr( $string, $ky_tu_cho_truoc )

Tách một chuỗi bắt đầu từ  $ky_tu_cho_truoc cho đến hết chuỗi.

ảnh minh họa

strpos($str, $chuoi_tim )

Tìm vị trí của chuỗi $chuoi_tim trong chuỗi $str, kết quả trả về false nếu không tìm thấy.

ảnh minh họa

strtolower($str);

Chuyển tất cả các ký tự chuỗi $str sang chữ thường

strtoupper($string );

Chuyển tất cả các ký tự chuỗi $str sang chữ hoa

ucfirst( $string )

Chuyển ký tự đầu tiên chuỗi $string sang chữ hoa

ucfirst( $string )

Ta chuyển ký tự đầu tiên trong chuỗi $string sang chữ thường

ucwords( $string )

Chuyên từ đầu tiên trong chuỗi $string sang chữ hoa

trim($string, $ky_tu);

Ta xóa ký tự $ky_tu nằm ở đầu và cuối chuỗi $str, nếu ta không nhập $ky_tu thì mặc định nó hiểu là xóa khoảng trắng.

ảnh minh họa

ltrim($string, $ky_tu);

Tương tự như trim nhưng chỉ xóa bên trái

rtrim($string, $ky_tu)

Tương tự như trim nhưng chỉ xóa bên phải

nl2br($string)

Chuyển các ký tự xuống dòng “\n” thành thẻ

json_decode($json, $is_array)

Được dùng để chuyển chuỗi dạng JSON sang các đối tượng mảng hoặc object. Nếu $is_array có giá trị false thì hàm sẽ chuyển một chuỗi $json thành một Class (object).  Ngược lại nếu $is_array có giá trị true thì sẽ chuyển chuỗi $json thành một mảng.

json_encode($array_or_object)

Ta chuyển một mảng hoặc mội đối tượng (classs) sang chuỗi dạng JSON.


Hãy tham gia nhóm Học lập trình để thảo luận thêm về các vấn đề cùng quan tâm.