Sắp xếp mảng kết hợp theo khóa
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 23 trên 68.
Dù sắp xếp theo giá trị rất hữu ích, đôi khi bạn cần sắp xếp mảng kết hợp theo khóa. PHP cung cấp ksort() để sắp xếp khóa theo thứ tự tăng dần và krsort() để sắp xếp khóa theo thứ tự giảm dần, đồng thời giữ nguyên mối liên kết quan trọng giữa khóa và giá trị.
Dưới đây là cách ksort() sắp xếp một mảng theo thứ tự bảng chữ cái dựa trên các khóa:
<?php
$settings = [
"theme" => "dark",
"language" => "english",
"notifications" => "enabled",
"auto_save" => "on"
];
ksort($settings);
print_r($settings);
// Đầu ra: Array ( [auto_save] => on [language] => english [notifications] => enabled [theme] => dark )
?>Hãy chú ý rằng các khóa giờ đã được sắp xếp theo thứ tự bảng chữ cái từ A đến Z, trong khi mỗi tên cài đặt vẫn đi cùng giá trị tương ứng. Cách này đặc biệt hữu ích khi bạn muốn hiển thị các tùy chọn cấu hình hoặc mục menu theo thứ tự dễ đoán và gọn gàng.
Để sắp xếp theo thứ tự bảng chữ cái ngược, krsort() hoạt động tương tự nhưng sắp xếp các khóa từ Z đến A. Cả hai hàm đều sửa đổi trực tiếp mảng ban đầu, giống như các hàm sắp xếp khác của PHP, nên rất hiệu quả khi sắp xếp dữ liệu mà thứ tự khóa quan trọng hơn thứ tự giá trị.
Thử thách
DễBạn sẽ nhận một đầu vào: một mảng kết hợp (associative array) gồm tên các phòng ban và khoản ngân sách được phân bổ cho từng phòng ban, ở định dạng JSON. Hãy đọc đầu vào, chuyển chuỗi JSON thành một mảng, dùng ksort() để sắp xếp các phòng ban theo khóa theo thứ tự bảng chữ cái tăng dần, 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 phòng ban làm khóa và số tiền ngân sách làm giá trị (ví dụ: {"Marketing":75000,"IT":120000,"HR":65000,"Finance":95000})
Đầu ra mong đợi: Mảng kết hợp đã sắp xếp theo thứ tự bảng chữ cái tăng dần của tên phòng ban (khóa), đượ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
$departments = (array)json_decode($input, true);
// TODO: Viết code bên dưới để sắp xếp mảng theo khóa
// In ra kết quả
print_r($departments);
?>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