我将举一个例子,它将更加直截了当:
我正在使用坐标,我想过滤掉不属于拾取坐标周围的坐标的坐标。这里以纬度为例:
$latitude = 4.3999291;
基本上,我有一系列纬度$array_latitudes
,我想测试每一个纬度是否属于$latitude
范围内的范围。
到目前为止我做了什么:
$set = range($latitude-0.2, $latitude+0.2, 0.0000001);
foreach ($array_latitudes as $lat){
if (in_array($lat, $set)){
echo $lat;
}
}
所以问题是,你猜对了,关于性能......创建一个10 ^ -7范围的值数组需要很长时间!
我的问题是:“是否有一种更简单,更有效的方式来返回$array_latitudes
中属于集[$latitude
- 0.2,$latitude
+ 0.2的纬度]精度为10 ^ -7?“
谢谢大家: - )
答案 0 :(得分:4)
你能不能只测试
if (abs($lat - $latitude) <= 0.2) {
echo $lat;
}
答案 1 :(得分:1)
除非我误解了某些事情,否则
if ( ($lat >= $latitude - 0.2) && ($lat <= $latitude + 0.2) )
echo $lat;
应该有用。
答案 2 :(得分:0)
您可以使用array_filter
将数组缩小到您要查找的值。
class RangeFilter {
var $lowerBound = 0;
var $upperBound = 0;
function RangeFilter($lowerBound, $upperBound) {
$this->lowerBound = $lowerBound;
$this->upperBound = $upperBound;
}
function filter($value) {
return ($value <= $this->upperBound && $value >= $this->lowerBound);
}
}
$latitude = 4.3999291;
$filter = new RangeFilter($latitude - 0.2, $latitude + 0.2);
$filteredCoordinates = array_filter($coordinates, array($filter, 'filter'));
但实际上,如果你想变得简单:
$latitude = 4.3999291;
$lowerBound = $latitude - 0.2;
$upperBound = $latitude + 0.2;
$filteredCoordinates = array();
foreach ($coordinates as $coordinate) {
if ($coordinate <= $upperBound && $coordinate >= $lowerBound) {
$filteredCoordinates[] = $coordinate;
}
}