我有一个数组,包含成员名称和使用geosearch with distance返回的距离。
0 =>
array (
0 => '2819483906',
1 => '19.8286',
),
1 =>
array (
0 => '2819912246',
1 => '19.6780',
)
我还有一些与成员名相关的数据,其中包含存储在
hsets
我用
hgetall
命令循环遍历该值,并根据获得的结果进行一些计算。
HSETS循环后关联成员的值:
array (
0 =>
array (
'id' => '2819483906',
'cc' => '2',
'lon' => '-84.76913364167706',
'lat' => '39.90915161402598',
),
1 =>
array (
'id' => '2819912246',
'cc' => '1',
'lon' => '-84.76144614926717',
'lat' => '39.90891054290965',
),
)
代码如下:
$geoPoints= $redis->executeRaw(["GEOSEARCH" ,$tableName , $type ,$lon ,$lat ,"BYRADIUS" ,$radius, $metric, "WITHDIST"]);
$weightedSum = 0;
for($i=0;$i<count($geoPoints);$i++){
if($redis->hgetall($geoPoints[$i])!=NULL){
$objArray = (object)$redis->hgetall($geoPoints[$i]);
$cc = (float)$objArray->cc;
$weightedSum += ($cc * ($radius - ($geoPoints[$i][1]/$radius)));
}
}
由于循环,当地质点阵列较大时,此过程非常耗时。在这里,我必须循环通过从Georgadius函数获得的所有点,并获得其相关的cc值,并将其用于计算。
(这些过程可以在PostgreSQL中完成,同时选择查询本身)。
是否有类似的方法或更好的方法,以便我可以防止循环,并以更快的方式获得结果。