Biến đổi bằng 'array_map'
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 39 trên 68.
Hàm array_map() là công cụ mạnh mẽ giúp biến đổi mọi phần tử trong mảng bằng cách áp dụng một hàm callback cho từng phần tử. Khác với các hàm sửa đổi mảng ban đầu, array_map() tạo và trả về một mảng hoàn toàn mới chứa các giá trị đã biến đổi.
Cú pháp cơ bản cần hai tham số: thứ nhất là hàm callback bạn muốn áp dụng, thứ hai là mảng bạn muốn chuyển đổi. PHP có nhiều hàm dựng sẵn hoạt động hoàn hảo làm callback với array_map().
<?php
$names = ["alice", "bob", "charlie"];
$uppercaseNames = array_map("strtoupper", $names);
// Kết quả: ["ALICE", "BOB", "CHARLIE"]
?>Trong ví dụ này, strtoupper được áp dụng cho từng phần tử trong mảng $names. Mảng ban đầu vẫn giữ nguyên, còn $uppercaseNames chứa các kết quả đã được chuyển đổi. Vì vậy, array_map() rất phù hợp khi bạn cần xử lý dữ liệu mà không làm mất các giá trị ban đầu.
Thử thách
DễBạn sẽ nhận được hai đầu vào: danh sách giá sản phẩm phân tách bằng dấu phẩy và phần trăm giảm giá. Đầu vào thứ nhất chứa các mức giá dưới dạng chuỗi theo định dạng 19.99,25.50,12.75,8.00, còn đầu vào thứ hai là phần trăm giảm giá dưới dạng số (ví dụ: 15).
Đọc cả hai đầu vào, chuyển các mức giá phân tách bằng dấu phẩy thành mảng số, áp dụng phần trăm giảm giá cho từng mức giá bằng array_map() cùng với hàm tích hợp floatval để chuyển đổi và phép tính giảm giá, rồi in mỗi mức giá sau giảm trên một dòng riêng, làm tròn đến 2 chữ số thập phân.
Để tính giá sau giảm: nhân giá gốc với (100 - discount) / 100.
Định dạng đầu vào:
- Dòng thứ nhất: Giá sản phẩm phân tách bằng dấu phẩy (ví dụ:
19.99,25.50,12.75,8.00) - Dòng thứ hai: Phần trăm giảm giá dưới dạng số (ví dụ:
15)
Đầu ra mong đợi: Mỗi mức giá sau giảm được in trên một dòng riêng, làm tròn đến 2 chữ số thập phân (ví dụ: 16.99, 21.68, 10.84, 6.80)
Tự làm thử
<?php
// Đọc đầu vào
$prices_input = trim(fgets(STDIN));
$discount = floatval(fgets(STDIN));
// Chuyển các giá được phân tách bằng dấu phẩy thành mảng
$prices = explode(',', $prices_input);
// TODO: Viết code bên dưới
// Dùng array_map() để áp dụng mức giảm giá cho từng giá
// In mỗi giá sau khi giảm trên một dòng riêng
?>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ạ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