2012-06-20 17 views
6

İşlemin "harita" işlevinin bir php eşdeğerini bulmaya çalışıyorum, böylece bir sayıyı bir aralıktan diğerine yeniden eşleştirebilirim. Bir şey var mı? Farklı bir şey mi deniyor? 0-100 aralığında 0-9 bir değer eşlemek için örneğinPhp'de "harita" işlevi var mı?

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

.

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

Bu işlevin kendinizin ne kadar kolay yazılacağını işaret etmek istiyorum. Eğer bu PHP için yerleşik değilse ortaya çıkarsa, sizin için yapacağım (ilk önce bunu yapmazsa) – Hubro

+3

Bu, 0 + ((75 * (9-0))/(100-0)) '? –

+0

Evet, kendimi yazmakta sorun yok Yerli bir fonksiyonun mevcut olup olmadığını merak ettim, yerli fonksiyonların her zaman özel bir yazılı fonksiyondan daha hızlı olacağını duymuştum (temel algoritmalar söz konusu olduğunda). –

cevap

10

Bunu yapmanın hiçbir yerli işlev, ancak oluşturmak çok kolaydır:

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

Bu denenmemiş, ama umarım fikir edinmek gerekir.

+0

Ana sorumu yanıtladığınız için (yerel bir işlev varsa) ve ayrıca bir örnek sağladığınız için teşekkür ederiz. –

1

Bu harika işlev için teşekkürler!

PHP'nin ölümcül bir hata yapmasını sağlayacak şekilde 0 ile bölünmekten kaçınmak için basit bir hata denetimi ekleyerek bu işlevi biraz geliştirebilirim.

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

    return ($value/($high1 - $low1)) * ($high2 - $low2) + $low2; 
} 
İlgili konular