2017-02-16 5 views
-1

У меня есть база данных с несколькими пользователями и данные о местоположении. Я положил их в массиве, как показано нижезначение push с ключом в массив в ключе = значение

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)) 

рассчитать расстояние с латами и LNG от каждого пользователя с mylat и mylng. Тогда я хочу, чтобы подтолкнуть значение $ DISTN в массиве $ пользователей на позиции/идентификатор ключа со значением идентификатора пользователя, но я не знаю, как:

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» после ключа «ид» со значением каждого пользователя. Если это работает, я хочу, чтобы отсортировать массив, так что пользователь с наименьшим «Dist» показан первый:

user3 1km distance 
user2 1.5km distance 
user1 3km distance 

Как я могу сделать все, что? Спасибо за вашу помощь :)

+0

у вас есть 3 того же вопроса. СТОП! – AbraCadaver

+0

AbraCadaver У меня есть два вопроса, которые немного похожи, но это что-то другое! Я хочу знать, как я могу передать значение в массив по определенному ключу. Я не имею ничего общего с моими старыми вопросами! – Sentry

+0

Ну, теперь вы знаете, как это сделать, см. Ниже. – AbraCadaver

ответ

1

Для первой части, используйте $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); 
+0

Он сработал наконец! благодаря – Sentry