2012-06-20 18 views
6

Estoy tratando de encontrar un equivalente php de la función de "mapa" del procesamiento para que pueda volver a mapear un número de un rango a otro. ¿Existe algo? ¿Se llama algo diferente?¿Hay una función de "mapa" en php?

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

Por ejemplo, para asignar un valor de 0-100 a 0-9.

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

Solo quiero señalar lo fácil que es escribir esta función usted mismo. Si resulta que esto no está incorporado en PHP lo haré por usted (si alguien más no lo hace primero) – Hubro

+3

No es equivalente a '0 + ((75 * (9-0))/(100-0)) '? –

+0

Sí, no hay problema para escribirme. Tenía curiosidad por saber si una función nativa estaba disponible, siempre escuché que las funciones nativas siempre serán más rápidas que las funciones escritas a medida (cuando se trata de algoritmos básicos). –

Respuesta

10

No hay ninguna función nativa para hacer esto, pero es fácil de crear:

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

Esto no se ha probado, pero se debe de esperar conseguir la idea.

+0

Gracias por responder mi pregunta principal (si existe una función nativa) y también proporcioné un ejemplo. –

1

¡Gracias por esta gran función!

Personalmente, mejoraría un poco esta función al agregar una simple comprobación de errores, para evitar dividir entre 0, lo que haría que PHP tuviera un error fatal.

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

    return ($value/($high1 - $low1)) * ($high2 - $low2) + $low2; 
} 
Cuestiones relacionadas