Hướng dẫn dùng alpha sorting trong PHP

Chào các bạn!

Show

Hôm nay tôi sẽ viết một tutorial về PHP. Chuyện là hôm trước đi thi, trong lúc chờ đợi, nhìn lên danh sách thí sinh dự thi. Tôi chợt nghĩ sao mình không thử viết một chương trình sắp xếp danh sách theo thứ tự alphabet (A-Z). Sau khi về nhà, ngồi vào máy và search Google, sau 30 phút cuối cùng cũng xong. Phù! Bây giờ tôi rất vui được chia sẻ với các bạn chương trình tôi viết. 🙂

Quay lại vấn đề chính, giả sử tôi có một danh sách các sinh viên cần được sắp xếp theo thứ tự A-Z và tất cả tên sinh viên đều được lưu vào một mảng.

Một mảng thường có cấu trúc như sau :

Array (
key => value
)

Do đó việc sắp xếp các phần tử mảng được chia thành 3 loại . Đó là

  1. Sắp xếp các phẩn tử mảng theo key
  2. Sắp xếp các phẩn tử mảng theo value
  3. Sắp xếp các phẩn tử mảng theo quy định của người dùng.

Dưới đây là các bài viết, hướng dẫn rất hay về sắp xếp (sort) trong PHP mà các bạn nên tham khảo thêm

http://www.php.net/manual/en/array.sorting.php

http://www.techrepublic.com/blog/programming-and-development/use-the-power-of-these-php-functions-to-sort-your-arrays/394

http://www.the-art-of-web.com/php/sortarray/

Sau khi đọc các bài viết trên, tôi hi vọng các bạn nắm được cơ bản cách sử dụng và công dụng của các hàm sắp xếp.

Thuật toán tôi sử dụng (chích xác là mẹo) cũng khá đơn giản. Trong các hàm đã đọc thì tôi chú ý đến hàm ksort() với chức năng sắp xếp các phần tử mảng theo key (chỉ số) . Mọi chuyện đơn giản hơn khi tôi thay key của mảng cũ bằng tên của mỗi sinh viên vì người Việt Nam chúng ta sắp xếp danh sách theo tên mà 🙂 .

Đọc đoạn code dưới đây các bạn sẽ hiểu hơn :

<?php
/**
* @author Tan Viet
* @copyright 2011
*/
// Sắp xếp danh sách phần tử mảng theo thứ tự Alphabet (A-Z)
$students = array(
0 => 'Huynh Van Nhan',
1 => 'Nguyen Xuan Thach',
2 => 'Le Tran Lam',
3 => 'Tran Sy Quy',
4 => 'Van Viet Vuong',
5 => 'Do Thi Phuong Thao'
);
// Thay đổi key của mảng ban dầu (0,1,..,5) thành tên của mỗi sinh viên để dễ sắp xếp
foreach ($students as $key => $val) {
$students[end(explode(" ", $val))] = $students[$key];
unset($students[$key]);
}
// In kết quả
echo "<h3>Tên các sinh viên sau khi sắp xếp theo Alphabet (A - Z)</h3>";
ksort($students);
foreach($students as $key => $val) {
echo $val;
}
?>

Và kết quả nhận được

Tên các sinh viên sau khi sắp xếp theo Alphabet (A - Z)
Le Tran Lam
Huynh Van Nhan
Tran Sy Quy
Nguyen Xuan Thach
Do Thi Phuong Thao
Van Viet Vuong

Trong đó :

+ Hàm explode() sẽ tách 1 chuỗi (string) đưa vào một mảng

+ Hàm end() sẽ lấy phần tử cuối cùng của mảng , trong trường hợp này nó sẽ lấy tên của mỗi sinh viên.

Tổng kết,

Đây chỉ là một chương trình nhỏ, nhưng biết đâu một ý tưởng lớn lại bắt đầu từ những điều giản đơn như thế này thì sao ? Hi vọng bài viết này hữu ích với các bạn . Thân ái ! ^^

Hàm sort() sẽ sắp xếp các phần tử của một mảng theo thứ tự từ thấp đến cao.

Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

Cú Pháp

Cú Phápsort($array, $sort_flag);

Trong đó:

  • $array là mảng cần sắp xếp.
  • $sort_flag là tham số không bắt buộc, quy định kiểu sắp xếp.

Vậy có các kiểu sắp xếp nào?

Bài viết này được đăng tại [free tuts .net]

  • SORT_REGULAR :  kiểu mặc định, so sánh bình thường.
  • SORT_NUMERIC : so sánh dựa vào số.
  • SORT_STRING :  so sánh dựa vào  chuỗi.
  • SORT_NATURAL: so sanh theo thứ tự alphabet.
  • SORT_FLAG_CASE : sử dụng kết hợp với SORT_STRING hoặc SORT_NATURAL để sắp xếp chuỗi mà không phân biệt chữ hoa chư thường.

Hàm sẽ trả về TRUE nếu sắp xếp thành công và FALSE nếu thất bại.

Ví dụ

Code

$subject = array(
	"php",
	 "java",
	  "js", 
	  "html"
);
sort($subject);
foreach ($subject as $key => $val) {
    echo "subject[" . $key . "] = " . $val . "<br />";
}

Kết quả

subject[0] = html
subject[1] = java
subject[2] = js
subject[3] = php

Code

$subject = array(
	1,
	43,
	55,
	24
);
sort($subject, SORT_NUMERIC);
foreach ($subject as $key => $val) {
    echo "subject[" . $key . "] = " . $val . "<br />";
}

Kết quả

subject[0] = 1
subject[1] = 24
subject[2] = 43
subject[3] = 55

Code

$subject = array(
	'laravel', 
	'Zend', 
	'cI'
);
sort($subject, SORT_NATURAL);
foreach ($subject as $key => $val) {
    echo "subject[" . $key . "] = " . $val . "<br />";
}

Kết quả

subject[0] = Zend
subject[1] = cI
subject[2] = laravel

Ta có thể thấy tuy rằng z đúng sau c nhưng Zend vẫn được xếp trên cI do Z được viết hoa.Để sắp xếp không phân biệt chữ hoa chữ thường ta nên dùng kết hợp với SORT_FLAG_CASE.

Code

$subject = array(
	'laravel', 
	'Zend', 
	'cI'
);
sort($subject, SORT_NATURAL | SORT_FLAG_CASE);
foreach ($subject as $key => $val) {
    echo "subject[" . $key . "] = " . $val . "<br />";
}

Kết quả

subject[0] = cI
subject[1] = laravel
subject[2] = Zend

chữ Zend đã về đúng vị trí của nó :D  

Tham khảo : php.net