我有一个带有乘用户的数据库,并且位置数据。我把它们放在像下面的数组中
id--username--lat-----lng
1 | user1 | 56.86 | 7.85
2 | user2 | 48.3 | 9.323
3 | user3 | 83.22 | 84.2
etc...
数组$用户看起来像:
$users = Array( [0] => ( [id] => 1[0] => 1[username] => user1[1] => user1[lat] => 56.86[2] => 56.86[lng] => 7.85[3] => 7.85)
[1] => ( [id] => 2[0] => 2[username] => user2[1] => user2[lat] => 48.3[2] => 48.3[lng] => 9.323[3] => 9.323)
[2] => ( [id] => 3[0] => 3[username] => user3[1] => user3[lat] => 83.22[2] => 83.22[lng] => 84.2[3] => 84.2))
我用mylat和mylng从每个用户那里计算出LAT和LNG的距离。然后,我想将$ $ distn推到带有用户ID值的位置/密钥ID的数组$ uders中,但我不知道如何:
foreach ($users as $row) { //for each user in database calculate the distance and set it to the variable $distn
$dist = 0.0;
$x1 = $mylng;
$x2 = $row['lng'];
$y1 = $mylat;
$y2 = $row['lat'];
$dist = acos(sin($x1=deg2rad($x1))*sin($x2=deg2rad($x2))+cos($x1)*cos($x2)*cos(deg2rad($y2) - deg2rad($y1)))*(6378.137);
$distn = FLOOR ( ROUND($dist,1) * 2 ) / 2 ;
push $distn into $users where id=row['id'] // this is just a sample not real code
}
以使数组现在看起来应该像这样:
$users = Array( [0] => ( [id] => 1[0] => 1[dist] => 3.0[1] => 3.0[username] => user1[2] => user1[lat] => 56.86[3] => 56.86[lng] => 7.85[4] => 7.85)
[1] => ( [id] => 2[0] => 2[dist] => 1.5[1] => 1.5[username] => user2[2] => user2[lat] => 48.3[3] => 48.3[lng] => 9.323[4] => 9.323)
[2] => ( [id] => 3[0] => => 3[dist] => 1.0[1] 1.0[username] => user3[2] => user3[lat] => 83.22[3] => 83.22[lng] => 84.2[4] => 84.2))
$ $ distn与键" dist"添加了键" id"之后,每个用户的值。如果有效,我想对数组进行排序,以便首先显示具有最低" DIST"的用户:
user3 1km distance
user2 1.5km distance
user1 3km distance
我该怎么做?感谢您的帮助:)
在第一部分中,使用 $key => $value
语法用于 foreach()
:
foreach ($users as $key => $row) {
// code
$users[$key]['dist'] = $distn;
}
对于排序,我将提取列并按原始分类:
array_multisort(array_column($users, 'dist'), SORT_ASC, $users);
另外,由于您使用的是一个关联数组,请考虑:
$users = $statement->fetchAll(PDO::FETCH_ASSOC);