Sử dụng hàm sắp xếp để xử lý mảng trong PHP
PHP Tutorial | by
Bạn có thể thu thập danh sách điểm số học sinh một cách ngẫu nhiên, hay nhận được dữ liệu sản phẩm không theo một trình tự nào. Để làm cho thông tin dễ hiểu, dễ tìm kiếm và dễ xử lý hơn, việc sắp xếp mảng là một kỹ năng không thể thiếu.
Sắp xếp mảng đơn giản là việc bố trí lại các phần tử trong mảng theo một thứ tự nhất định—có thể là tăng dần, giảm dần, theo thứ tự bảng chữ cái, hoặc theo một tiêu chí nào đó mà bạn định nghĩa. Imagine a library with books scattered everywhere; sorting them by author or title makes them much more useful! Trong PHP, có nhiều hàm được tích hợp sẵn giúp bạn thực hiện việc này một cách hiệu quả, phù hợp với từng loại mảng và nhu cầu cụ thể. Bài viết này sẽ hướng dẫn bạn cách sử dụng các hàm sắp xếp cơ bản nhất, từ việc sắp xếp các số đơn giản đến việc tổ chức lại dữ liệu phức tạp hơn trong mảng kết hợp, giúp dữ liệu của bạn luôn được trình bày một cách khoa học và dễ quản lý.
Các Hàm Sắp Xếp Cơ Bản Cho Mảng Có Chỉ Số (Indexed Arrays) trong PHP
Khi làm việc với mảng có chỉ số, việc sắp xếp các phần tử thường đi kèm với mong muốn giữ cho các chỉ số số nguyên được liên tục (bắt đầu từ 0). PHP cung cấp các hàm chuyên biệt để thực hiện điều này một cách dễ dàng.
sort()
: Sắp Xếp Giá Trị Tăng Dần (và Gán Lại Chỉ Số Số Nguyên)
Hàm sort()
là lựa chọn hàng đầu khi bạn muốn sắp xếp một mảng có chỉ số theo thứ tự tăng dần của các giá trị.
Cách thức hoạt động:
Nó sẽ sắp xếp tất cả các phần tử trong mảng theo thứ tự tăng dần:
-
Đối với số: Từ nhỏ nhất đến lớn nhất (ví dụ: 1, 5, 10).
-
Đối với chuỗi: Theo thứ tự bảng chữ cái (ví dụ: "Apple", "Banana", "Cherry").
Sau khi sắp xếp, sort()
sẽ gán lại chỉ số số nguyên cho các phần tử, bắt đầu từ 0, đảm bảo rằng mảng vẫn giữ được cấu trúc chỉ số liên tục.Cú pháp:
sort($array);
$array
: Mảng bạn muốn sắp xếp. Lưu ý: Hàm này thay đổi trực tiếp mảng gốc, không trả về mảng mới.Ví dụ code minh họa:
<?php echo "<h3>1. Sử dụng `sort()`</h3>"; // Ví dụ 1: Sắp xếp một mảng số $scores = [85, 72, 90, 65, 88]; echo "Mảng điểm số ban đầu: "; echo "<pre>"; print_r($scores); echo "</pre>"; sort($scores); // Sắp xếp tăng dần echo "Mảng điểm số sau khi dùng `sort()`: "; echo "<pre>"; print_r($scores); echo "</pre>"; /* Output: Array ( [0] => 65 [1] => 72 [2] => 85 [3] => 88 [4] => 90 ) */ echo "Các chỉ số đã được gán lại từ 0.<br>"; echo "<hr>"; // Ví dụ 2: Sắp xếp một mảng chuỗi $fruits = ["Cherry", "Banana", "Apple", "Date"]; echo "Mảng trái cây ban đầu: "; echo "<pre>"; print_r($fruits); echo "</pre>"; sort($fruits); // Sắp xếp tăng dần theo bảng chữ cái echo "Mảng trái cây sau khi dùng `sort()`: "; echo "<pre>"; print_r($fruits); echo "</pre>"; /* Output: Array ( [0] => Apple [1] => Banana [2] => Cherry [3] => Date ) */ echo "Các chỉ số đã được gán lại từ 0.<br>"; ?>
rsort()
: Sắp Xếp Giá Trị Giảm Dần (và Gán Lại Chỉ Số Số Nguyên)
Hàm rsort()
là "ngược lại" của sort()
. Nó giúp bạn sắp xếp mảng có chỉ số theo thứ tự giảm dần của các giá trị.
Cách thức hoạt động:
-
Nó sẽ sắp xếp tất cả các phần tử trong mảng theo thứ tự giảm dần:
-
Đối với số: Từ lớn nhất đến nhỏ nhất (ví dụ: 10, 5, 1).
-
Đối với chuỗi: Theo thứ tự bảng chữ cái ngược lại (ví dụ: "Cherry", "Banana", "Apple").
-
-
Tương tự như
sort()
,rsort()
cũng sẽ gán lại chỉ số số nguyên cho các phần tử, bắt đầu từ 0.
Cú pháp:
rsort($array);
$array
: Mảng bạn muốn sắp xếp. Lưu ý: Hàm này cũng thay đổi trực tiếp mảng gốc.
Ví dụ code minh họa:
<?php echo "<h3>2. Sử dụng `rsort()`</h3>"; // Ví dụ 1: Sắp xếp một mảng số $scores = [85, 72, 90, 65, 88]; echo "Mảng điểm số ban đầu: "; echo "<pre>"; print_r($scores); echo "</pre>"; rsort($scores); // Sắp xếp giảm dần echo "Mảng điểm số sau khi dùng `rsort()`: "; echo "<pre>"; print_r($scores); echo "</pre>"; /* Output: Array ( [0] => 90 [1] => 88 [2] => 85 [3] => 72 [4] => 65 ) */ echo "Các chỉ số đã được gán lại từ 0.<br>"; echo "<hr>"; // Ví dụ 2: Sắp xếp một mảng chuỗi $fruits = ["Cherry", "Banana", "Apple", "Date"]; echo "Mảng trái cây ban đầu: "; echo "<pre>"; print_r($fruits); echo "</pre>"; rsort($fruits); // Sắp xếp giảm dần theo bảng chữ cái echo "Mảng trái cây sau khi dùng `rsort()`: "; echo "<pre>"; print_r($fruits); echo "</pre>"; /* Output: Array ( [0] => Date [1] => Cherry [2] => Banana [3] => Apple ) */ echo "Các chỉ số đã được gán lại từ 0.<br>"; ?>
Các Hàm Sắp Xếp Cho Mảng Kết Hợp (Associative Arrays) trong PHP
Khi làm việc với mảng kết hợp, nơi mỗi giá trị được liên kết với một khóa có ý nghĩa, điều quan trọng thường là duy trì liên kết này ngay cả sau khi sắp xếp. PHP cung cấp một bộ hàm sắp xếp đặc biệt cho mảng kết hợp, cho phép bạn sắp xếp dựa trên giá trị hoặc khóa mà vẫn giữ nguyên mối quan hệ giữa chúng.
asort()
: Sắp Xếp Theo Giá Trị Tăng Dần (Duy Trì Liên Kết Khóa-Giá Trị)
Hàm asort()
giúp bạn sắp xếp mảng kết hợp dựa trên các giá trị của nó theo thứ tự tăng dần, đồng thời đảm bảo rằng các khóa vẫn "dính" với giá trị ban đầu của chúng.
-
Cách thức hoạt động: Sắp xếp các phần tử dựa trên giá trị của chúng theo thứ tự tăng dần (từ nhỏ đến lớn, A-Z). Điểm mấu chốt là nó duy trì liên kết giữa khóa và giá trị của mỗi phần tử. Điều này có nghĩa là, nếu khóa "Alice" có giá trị 85, thì sau khi sắp xếp, "Alice" và 85 vẫn đi cùng nhau.
-
Cú pháp:
asort($array);
$array
: Mảng kết hợp bạn muốn sắp xếp. Hàm này thay đổi trực tiếp mảng gốc.
Ví dụ code minh họa:
<?php echo "<h3>1. Sử dụng `asort()`</h3>"; // Sắp xếp danh sách điểm thi của học sinh theo điểm số (giữ nguyên tên học sinh) $studentScores = [ "Alice" => 85, "Bob" => 72, "Charlie" => 90, "David" => 65, "Eve" => 88 ]; echo "Điểm học sinh ban đầu: "; echo "<pre>"; print_r($studentScores); echo "</pre>"; asort($studentScores); // Sắp xếp theo giá trị (điểm số) tăng dần echo "Điểm học sinh sau khi dùng `asort()` (sắp xếp theo điểm, giữ tên): "; echo "<pre>"; print_r($studentScores); echo "</pre>"; /* Output: Array ( [David] => 65 [Bob] => 72 [Alice] => 85 [Eve] => 88 [Charlie] => 90 ) */ echo "Thứ tự đã thay đổi dựa trên điểm số, nhưng tên học sinh vẫn đúng với điểm.<br>"; ?>
arsort()
: Sắp Xếp Theo Giá Trị Giảm Dần (Duy Trì Liên Kết Khóa-Giá Trị)
arsort()
là phiên bản sắp xếp giảm dần của asort()
, rất hữu ích khi bạn muốn xem các giá trị cao nhất trước.
-
Cách thức hoạt động: Sắp xếp các phần tử dựa trên giá trị của chúng theo thứ tự giảm dần (từ lớn đến nhỏ, Z-A). Giống như
asort()
, nó cũng duy trì liên kết giữa khóa và giá trị. -
Cú pháp:
arsort($array);
$array
: Mảng kết hợp bạn muốn sắp xếp. Hàm này thay đổi trực tiếp mảng gốc.
Ví dụ code minh họa:
<?php echo "<h3>2. Sử dụng `arsort()`</h3>"; // Sắp xếp danh sách điểm thi của học sinh theo điểm số (giảm dần) $studentScores = [ "Alice" => 85, "Bob" => 72, "Charlie" => 90, "David" => 65, "Eve" => 88 ]; echo "Điểm học sinh ban đầu: "; echo "<pre>"; print_r($studentScores); echo "</pre>"; arsort($studentScores); // Sắp xếp theo giá trị (điểm số) giảm dần echo "Điểm học sinh sau khi dùng `arsort()` (sắp xếp theo điểm giảm dần, giữ tên): "; echo "<pre>"; print_r($studentScores); echo "</pre>"; /* Output: Array ( [Charlie] => 90 [Eve] => 88 [Alice] => 85 [Bob] => 72 [David] => 65 ) */ echo "Học sinh có điểm cao nhất hiện ra trước.<br>"; ?>
ksort()
: Sắp Xếp Theo Khóa Tăng Dần (Duy Trì Liên Kết Khóa-Giá Trị)
Nếu bạn muốn sắp xếp mảng kết hợp dựa trên chính các khóa của nó, ksort()
là hàm bạn cần.
Cách thức hoạt động: Sắp xếp các phần tử dựa trên khóa của chúng theo thứ tự tăng dần (theo bảng chữ cái hoặc số học). Hàm này cũng duy trì liên kết giữa khóa và giá trị.
Cú pháp:
ksort($array);
$array
: Mảng kết hợp bạn muốn sắp xếp. Hàm này thay đổi trực tiếp mảng gốc.
-
Ví dụ code minh họa:
<?php echo "<h3>3. Sử dụng `ksort()`</h3>"; // Sắp xếp danh sách thông tin người dùng theo thứ tự chữ cái của các khóa $userInfo = [ "name" => "Jane Doe", "age" => 30, "city" => "London", "zip" => "SW1A 0AA", "email" => "[email protected]" ]; echo "Thông tin người dùng ban đầu: "; echo "<pre>"; print_r($userInfo); echo "</pre>"; ksort($userInfo); // Sắp xếp theo khóa tăng dần echo "Thông tin người dùng sau khi dùng `ksort()` (sắp xếp theo khóa): "; echo "<pre>"; print_r($userInfo); echo "</pre>"; /* Output: Array ( [age] => 30 [city] => London [email] => [email protected] [name] => Jane Doe [zip] => SW1A 0AA ) */ echo "Các khóa được sắp xếp theo thứ tự bảng chữ cái.<br>"; ?>
krsort()
: Sắp Xếp Theo Khóa Giảm Dần (Duy Trì Liên Kết Khóa-Giá Trị)
krsort()
là hàm đối nghịch với ksort()
, sắp xếp các phần tử theo thứ tự giảm dần của khóa.
-
Cách thức hoạt động: Sắp xếp các phần tử dựa trên khóa của chúng theo thứ tự giảm dần (theo bảng chữ cái ngược lại hoặc số học). Hàm này cũng duy trì liên kết giữa khóa và giá trị.
-
Cú pháp:
krsort($array);
$array
: Mảng kết hợp bạn muốn sắp xếp. Hàm này thay đổi trực tiếp mảng gốc.
Ví dụ code minh họa:
<?php echo "<h3>4. Sử dụng `krsort()`</h3>"; // Sắp xếp danh sách thông tin theo khóa giảm dần $userInfo = [ "name" => "Jane Doe", "age" => 30, "city" => "London", "zip" => "SW1A 0AA", "email" => "[email protected]" ]; echo "Thông tin người dùng ban đầu: "; echo "<pre>"; print_r($userInfo); echo "</pre>"; krsort($userInfo); // Sắp xếp theo khóa giảm dần echo "Thông tin người dùng sau khi dùng `krsort()` (sắp xếp theo khóa giảm dần): "; echo "<pre>"; print_r($userInfo); echo "</pre>"; /* Output: Array ( [zip] => SW1A 0AA [name] => Jane Doe [email] => [email protected] [city] => London [age] => 30 ) */ echo "Các khóa được sắp xếp theo thứ tự bảng chữ cái ngược lại.<br>"; ?>
So Sánh Các Hàm Sắp Xếp Chính Trong PHP
Việc lựa chọn hàm sắp xếp phù hợp là rất quan trọng để đảm bảo dữ liệu của bạn được tổ chức đúng cách và ứng dụng hoạt động hiệu quả. Các hàm sắp xếp trong PHP có thể được nhóm lại dựa trên mục đích chính của chúng: sắp xếp theo giá trị hay theo khóa, và có giữ lại liên kết khóa-giá trị hay không.
Dưới đây là bảng tóm tắt và so sánh các hàm sắp xếp cơ bản: