[PHP] Sắp xếp danh sách theo alphabet

Chào các bạn!

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 ! ^^

Tấn Việt

Tôi lập trang web này để thỏa mãn sở thích viết cái gì đó vui vui khi rãnh rỗi và đồng thời cũng chia sẻ những gì tôi biết hoặc đọc đâu đó trên mạng về Lập trình web. Tôi hi vọng những bài viết này sẽ giúp ích cho các bạn. Thân ái!

You may also like…

3 Responses

  1. phu says:

    bai viet hay lam ,thanks

  2. Dung ham says:

    Hàm array_flip có ích trong trường hợp này ban ạ

    • Tấn Việt says:

      Mình đã thử dùng hàm array_flip của bạn nhưng không ra kết quả mong muốn. Bạn có thể giải thích thêm về comment của bạn đc ko? 🙂