[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à
- Sắp xếp các phẩn tử mảng theo key
- Sắp xếp các phẩn tử mảng theo value
- 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.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 ! ^^
bai viet hay lam ,thanks
Hàm array_flip có ích trong trường hợp này ban ạ
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? 🙂