Ôn tập: xử lý dữ liệu
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 45 trên 68.
Thử thách
DễBạn sẽ nhận được ba đầu vào: danh sách tên nhân viên được phân tách bằng dấu phẩy, danh sách số giờ làm tương ứng trong tuần được phân tách bằng dấu phẩy và ngưỡng số giờ tối thiểu. Đầu vào thứ nhất chứa tên theo định dạng Alice,Bob,Charlie,Diana,Eve, đầu vào thứ hai chứa số giờ dưới dạng số theo định dạng 45,32,50,28,40, còn đầu vào thứ ba là ngưỡng số giờ tối thiểu dưới dạng số (ví dụ: 35).
Đọc cả ba đầu vào và chuyển chúng thành các mảng phù hợp. Tạo một mảng kết hợp, trong đó tên nhân viên là khóa và số giờ làm của họ là giá trị. Sau đó thực hiện các thao tác sau bằng các hàm mảng bậc cao:
- Dùng
array_filter()với hàm callback tùy chỉnh để chỉ giữ lại những nhân viên đã làm bằng hoặc nhiều hơn ngưỡng số giờ tối thiểu - Dùng
array_map()với hàm callback tùy chỉnh để tính tiền làm thêm giờ cho những nhân viên đã lọc (giờ làm thêm là số giờ vượt quá 40, được trả gấp 1.5 lần mức 25 đô la mỗi giờ cho giờ làm thông thường) - Dùng
array_reduce()với hàm callback tùy chỉnh để tính tổng tiền làm thêm giờ của tất cả nhân viên đã lọc
In kết quả theo định dạng sau:
- Đầu tiên, in tên của từng nhân viên đủ điều kiện cùng tiền làm thêm giờ của họ trên các dòng riêng, theo định dạng
Name: $Amount(làm tròn đến 2 chữ số thập phân) - Cuối cùng, in tổng tiền làm thêm giờ theo định dạng
Total: $Amount(làm tròn đến 2 chữ số thập phân)
Chi tiết tính toán:
- Giờ làm thông thường (tối đa 40): 25 đô la mỗi giờ
- Giờ làm thêm (vượt quá 40): 37.50 đô la mỗi giờ (gấp 1.5 lần mức lương)
- Nếu nhân viên làm 40 giờ trở xuống, tiền làm thêm giờ của họ là $0.00
Định dạng đầu vào:
- Dòng thứ nhất: Tên nhân viên được phân tách bằng dấu phẩy (ví dụ:
Alice,Bob,Charlie,Diana,Eve) - Dòng thứ hai: Số giờ làm được phân tách bằng dấu phẩy (ví dụ:
45,32,50,28,40) - Dòng thứ ba: Ngưỡng số giờ tối thiểu dưới dạng số (ví dụ:
35)
Đầu ra mong đợi: Tên của từng nhân viên đủ điều kiện cùng tiền làm thêm giờ của họ trên các dòng riêng, tiếp theo là tổng tiền làm thêm giờ; tất cả số tiền đều được định dạng với 2 chữ số thập phân
Tự làm thử
<?php
// Đọc dữ liệu đầu vào
$names = explode(',', trim(fgets(STDIN)));
$hours = explode(',', trim(fgets(STDIN)));
$minHours = intval(trim(fgets(STDIN)));
// Chuyển số giờ thành số nguyên
$hours = array_map('intval', $hours);
// Tạo mảng kết hợp chứa tên và số giờ
$employees = array_combine($names, $hours);
// TODO: Viết code của bạn bên dưới
// 1. Dùng array_filter() để giữ lại nhân viên làm việc đủ hoặc vượt số giờ tối thiểu
// 2. Dùng array_map() để tính tiền làm thêm giờ cho những nhân viên đã lọc
// 3. Dùng array_reduce() để tính tổng tiền làm thêm giờ
// Xuất kết quả
// In ra tiền làm thêm giờ của từng nhân viên đủ điều kiện
// In ra tổng tiền làm thêm giờ
?>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ạng6Các hàm mảng bậc cao
Biến đổi bằng 'array_map''array_map' với hàm tùy chỉnhLọc bằng 'array_filter''array_filter' với hàm tùy chỉnhRút gọn bằng 'array_reduce'Duyệt bằng 'array_walk'Ôn tập: xử lý dữ liệuTự luyện tập: Trình biên dịch PHP online