在PHP中如何知道一个数字是否属于一个集合


How to know if a number belongs to a set in PHP?

我举个例子,这样会更直接:

我正在处理坐标,我想过滤不属于选定坐标周围的集合的坐标。这里是纬度,例如:

$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 ?"

谢谢大家:-)

你就不能测试一下

if (abs($lat - $latitude) <= 0.2) {
  echo $lat;
}

?

除非我误解了什么,

if ( ($lat >= $latitude - 0.2) && ($lat <= $latitude + 0.2) )
    echo $lat;

您可以使用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;
    }
}