Menu
CoddyTech

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.

challenge icon

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

?>
quiz iconTự kiểm tra

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

Tự luyện tập: Trình biên dịch PHP online