2012-03-20 3 views
1

Есть ли у PHP какая-то функция, которая будет сравнивать числа? Я знаю, что у них есть текст сравнение как similar_text() Но сказать, что я хочу, чтобы сравнить значения лат/LNG, и они очень похожи, но очень небольшая разницаphp сравнение двух чисел вместе

пример:

place 1 

lat: 34.095161 
lng: -117.720638 

compare with 

lat: 34.0948841 
lng: -117.7206854 

place 2 

lat: 34.094572563643 
lng: -117.72184828904 

compare with 

lat: 34.094112 
lng: -117.7250746 

Они, может быть, очень близко друг к другу, Я хочу иметь возможность получить определенный диапазон? Есть ли какая-то функция PHP, которую я могу использовать?

Благодаря

+1

Почему не просто 'round()' их до какой степени точности вы хотите? – Interrobang

+1

'similar_text' вычисляет своего рода« расстояние »между двумя строками. Для чисел эквивалент равен ['abs ($ lat1 - $ lat2)'] (http://www.php.net/manual/en/function.abs.php). – ruakh

+0

@Interrobang Я не пытаюсь округлить число, потому что округление lat и lng приведет к нежелательным результатам – hellomello

ответ

2

Я не думаю, что есть встроенная функция. Возможно, вы могли бы использовать евклидову расстояние, чтобы вычислить их сходство, это простой в реализации способ.

$diff = sqrt((($lat1 - $lat2) * ($lat1 - $lat2)) + (($lng1 - $lng2) * ($lng1 - $lng2))); 
$epsilon = 0.0001; 
if ($diff < $espilon) { 
    echo 'we consider them equal'; 
} else { 
    echo 'they are different'; 
} 

NB: $ Diff здесь чисто количественная разница, вы не можете рассмотреть Lat значения/LNG как формирование 2D точек, расстояние можно вычислить с помощью евклидовой подход в строгом смысле слова (см here why)

+0

Использование 'pow' обычно медленнее, чем умножение двух значений вместе. Я бы рекомендовал изменить вашу первую строку на 'sqrt ((($ lat1 - $ lat2) * ($ lat1 - $ lat2)) + (($ lng1 - $ lng2) * ($ lng1 - $ lng2)))'. Результат менее читабельный, но обычно быстрее. =) –

+0

Я верю, что это дало бы мне представление о том, как обойти мой код ... Спасибо – hellomello

+0

@ElliotBonneville, вы могли бы отредактировать мой ответ;) – AsTeR

2

принимают также посмотрите на Haversine formula. Обычно используется, чтобы видеть, насколько велико расстояние между двумя точками на сфере.

Смежные вопросы