2012-06-20 23 views
6

Tôi đang cố gắng tìm một hàm tương đương với hàm "bản đồ" của xử lý để tôi có thể ánh xạ lại một số từ một phạm vi này sang phạm vi khác. Có điều gì tồn tại không? Nó được gọi là một cái gì đó khác nhau?Có chức năng "bản đồ" trong php không?

http://processing.org/reference/map_.html

Ví dụ để ánh xạ giá trị từ 0-100 đến 0-9.

map(75, 0, 100, 0, 9); 
+2

Tôi chỉ muốn chỉ ra mức độ dễ dàng của chức năng này để tự viết. Nếu nó chỉ ra điều này không được xây dựng trong PHP tôi sẽ làm điều đó cho bạn (nếu ai đó không làm điều đó trước) – Hubro

+3

Không phải là tương đương với '0 + ((75 * (9-0))/(100-0)) '? –

+0

Vâng, không có vấn đề gì khi viết bản thân mình, tôi chỉ tò mò nếu có một hàm gốc, tôi luôn nghe rằng các hàm gốc sẽ luôn nhanh hơn hàm viết tùy chỉnh (khi các thuật toán cơ bản liên quan). –

Trả lời

10

Không có chức năng tự nhiên để làm điều này, nhưng nó dễ dàng để tạo:

function map($value, $low1, $high1, $low2, $high2) { 
    return ($value/($high1 - $low1)) * ($high2 - $low2) + $low2; 
} 

Đây là chưa được kiểm tra, nhưng bạn hy vọng sẽ nhận được các ý tưởng.

+0

Cảm ơn bạn đã trả lời câu hỏi chính của tôi (nếu có một hàm gốc) và cũng cung cấp một ví dụ. –

1

Cảm ơn chức năng tuyệt vời này!

Cá nhân tôi sẽ cải thiện một chút chức năng này bằng cách thêm kiểm tra lỗi đơn giản, để tránh chia cho 0, điều này sẽ làm cho PHP có lỗi nghiêm trọng.

function map($value, $low1, $high1, $low2, $high2) { 
    if ($low1 == $high1) 
     return $low1; 

    return ($value/($high1 - $low1)) * ($high2 - $low2) + $low2; 
} 
Các vấn đề liên quan