Sắp xếp mảng kết hợp theo giá trị
Thuộc phần Logic và luồng chương trình trong hành trình PHP của Coddy. Bài học 22 trên 68.
Khi làm việc với mảng kết hợp, bạn thường cần sắp xếp chúng theo giá trị mà vẫn giữ nguyên mối liên hệ giữa khóa và giá trị. PHP cung cấp hai hàm chuyên dụng cho mục đích này: asort() để sắp xếp theo thứ tự tăng dần và arsort() để sắp xếp theo thứ tự giảm dần.
Đây là cách asort() sắp xếp theo giá trị tăng dần:
<?php
$students = [
"Alice" => 85,
"Bob" => 92,
"Charlie" => 78,
"Diana" => 96
];
asort($students);
print_r($students);
// Đầu ra: Array ( [Charlie] => 78 [Alice] => 85 [Bob] => 92 [Diana] => 96 )
?>Hãy để ý rằng giờ đây các điểm số được sắp xếp từ thấp đến cao, nhưng tên của mỗi học sinh vẫn được ghép đúng với điểm số của mình. Đây là ưu điểm chính của asort() so với sort() thông thường. Hàm này giữ nguyên mối liên hệ giữa khóa và giá trị.
Để sắp xếp theo thứ tự giảm dần, arsort() hoạt động tương tự nhưng sắp xếp các giá trị từ cao nhất đến thấp nhất:
<?php
arsort($students);
print_r($students);
// Đầu ra: Array ( [Diana] => 96 [Bob] => 92 [Alice] => 85 [Charlie] => 78 )
?>Cả hai hàm đều sửa đổi trực tiếp mảng ban đầu, giống như các hàm tương ứng với mảng có chỉ số. Vì vậy, chúng rất phù hợp để sắp xếp dữ liệu như điểm số của học sinh, giá sản phẩm hoặc bất kỳ trường hợp nào bạn cần sắp xếp theo giá trị mà vẫn giữ nguyên các cặp khóa-giá trị.
Thử thách
DễBạn sẽ nhận một đầu vào: một mảng kết hợp gồm tên nhân viên và mức lương của họ ở định dạng JSON. Đọc đầu vào, chuyển chuỗi JSON thành mảng, dùng arsort() để sắp xếp nhân viên theo mức lương giảm dần (từ cao nhất đến thấp nhất), rồi in mảng đã sắp xếp bằng print_r().
Định dạng đầu vào: Một dòng chứa đối tượng JSON có tên nhân viên làm khóa và mức lương làm giá trị (ví dụ: {"John":45000,"Sarah":52000,"Mike":38000,"Lisa":61000})
Đầu ra mong đợi: Mảng kết hợp đã sắp xếp theo giá trị mức lương giảm dần, được hiển thị bằng print_r()
Tự làm thử
<?php
// Đọc đầu vào
$input = fgets(STDIN);
// Chuyển JSON thành mảng kết hợp
$employees = (array)json_decode($input, true);
// TODO: Viết code bên dưới để sắp xếp mảng theo lương giảm dần
// In ra mảng đã sắp xếp
print_r($employees);
?>Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.
Tất cả bài học trong Logic và luồng chương trình
1Hàm nâng cao
Hàm ẩn danhClosure và 'use'Hàm mũi tênHàm callbackDùng 'call_user_func'Hàm biếnTruyền tham chiếuHàm đệ quyÔn tập: tổng hợp về hàm4Mảng đa chiều
Tạo mảng 2 chiềuTruy cập phần tử trong mảng 2 chiềuChỉnh sửa phần tử trong mảng 2 chiềuLặp qua các vòng lặp lồng nhauMảng kết hợp 2 chiềuÔn tập: bài tập lưới đơn giản2Thao tác nâng cao với mảng
Thêm phần tử bằng 'array_push'Xóa phần tử bằng 'array_pop'Thêm phần tử vào đầu mảng bằng 'array_unshift'Xóa phần tử đầu mảng bằng 'array_shift'Gộp các mảng được đánh chỉ sốGộp các mảng kết hợpTrích xuất phần tử bằng 'array_slice'Kiểm tra giá trị bằng 'in_array'Tìm khóa bằng 'array_search'Ôn tập: bài tập về danh sách phát3Sắp xếp mảng
Sắp xếp mảng có chỉ số tăng dầnSắp xếp mảng có chỉ số giảm dầnSắp xếp mảng kết hợp theo giá trịSắp xếp mảng kết hợp theo khóaSắp xếp theo thứ tự tự nhiênSắp xếp tùy chỉnh bằng 'usort'Ôn tập: Sắp xếp bảng xếp hạngTự luyện tập: Trình biên dịch PHP online