Menu
CoddyTech

'array_map' với hàm tùy chỉnh

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 40 trên 68.

Các hàm có sẵn như strtoupper hoạt động tốt với array_map(), nhưng sức mạnh thực sự đến từ việc dùng các hàm tùy chỉnh của riêng bạn. Nhờ đó, bạn có thể tạo các phép biến đổi cụ thể phù hợp chính xác với nhu cầu của mình.

Để dùng một hàm tùy chỉnh với array_map(), bạn chỉ cần truyền tên hàm dưới dạng chuỗi cho tham số đầu tiên. Hàm tùy chỉnh của bạn nên nhận một tham số (phần tử hiện tại của mảng) và trả về giá trị đã được chuyển đổi.

<?php
function doubleNumber($num) {
    return $num * 2;
}

$numbers = [1, 2, 3, 4, 5];
$doubled = array_map("doubleNumber", $numbers);
// Kết quả: [2, 4, 6, 8, 10]
?>

Cách tiếp cận này giúp bạn kiểm soát hoàn toàn cách xử lý từng phần tử. Bạn có thể thực hiện các phép tính phức tạp, thao tác chuỗi hoặc bất kỳ logic nào khác bên trong hàm tùy chỉnh, nhờ đó array_map() trở nên vô cùng linh hoạt khi chuyển đổi dữ liệu.

challenge icon

Thử thách

Dễ

Bạn sẽ nhận hai đầu vào: một danh sách nhiệt độ Celsius được phân tách bằng dấu phẩy và một đơn vị đích để chuyển đổi, có thể là F cho Fahrenheit hoặc K cho Kelvin. Đầu vào thứ nhất chứa nhiệt độ dưới dạng chuỗi theo định dạng 0,10,20,30,100, còn đầu vào thứ hai là một ký tự cho biết kiểu chuyển đổi.

Đọc cả hai đầu vào, chuyển các nhiệt độ được phân tách bằng dấu phẩy thành một mảng số, tạo một hàm (function) tùy chỉnh để chuyển đổi nhiệt độ Celsius sang đơn vị đích, dùng array_map() cùng hàm tùy chỉnh để chuyển đổi tất cả nhiệt độ, rồi in từng nhiệt độ đã chuyển đổi trên một dòng riêng, làm tròn đến 2 chữ số thập phân.

Công thức chuyển đổi:

  • Celsius sang Fahrenheit: (C × 9/5) + 32
  • Celsius sang Kelvin: C + 273.15

Định dạng đầu vào:

  • Dòng thứ nhất: Các nhiệt độ Celsius được phân tách bằng dấu phẩy (ví dụ: 0,10,20,30,100)
  • Dòng thứ hai: Đơn vị chuyển đổi đích, có thể là F hoặc K (ví dụ: F)

Đầu ra mong đợi: In từng nhiệt độ đã chuyển đổi trên một dòng riêng, làm tròn đến 2 chữ số thập phân

Tự làm thử

<?php
// Đọc các nhiệt độ được phân tách bằng dấu phẩy
$temperatures = fgets(STDIN);

// Đọc đơn vị đích (F hoặc K)
$unit = trim(fgets(STDIN));

// Chuyển chuỗi các nhiệt độ được phân tách bằng dấu phẩy thành mảng số
$tempArray = explode(',', trim($temperatures));

// TODO: Viết code của bạn bên dưới
// Tạo hàm (function) tùy chỉnh để chuyển từ độ C sang đơn vị đích
// Dùng array_map() để chuyển đổi tất cả nhiệt độ
// In mỗi nhiệt độ đã chuyển đổi trên một dòng riêng, làm tròn đến 2 chữ số thập phân

?>
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