Правильно ли я понимаю, что вы хотите получить новый массив, который содержит агрегированные записи для каждой записи из $ строк?Если да, вы можете сделать что-то вроде этого:
$db = $this->getDbo();
$query = $db->getQuery(true)
->select('*')
->from('#__listing');
$db->setQuery($query);
$db->query();
$rows = $db->loadAssocList();
$arr_data = [];
foreach ($rows as $rowIndex=>$rowData) {
$theta = $longitudeFrom - $rowData['longitude'];
$dist = sin(deg2rad($latitudeFrom))
* sin(deg2rad($rowData['latitude']))
+ cos(deg2rad($latitudeFrom))
* cos(deg2rad($rowData['latitude']))
* cos(deg2rad($theta));
$dist = acos($dist);
$dist = rad2deg($dist);
$miles = $dist * 60 * 1.1515;
$distance = $miles * 1.609344;
$arr_data[$rowIndex] = [
'id' => $rowData['id'],
'name' => $rowData['name'],
'distance' => $distance
];
}
PS: Я использую сокращенную запись массива []
, но она равна array()
PPS: также существует проблема в исходном коде с обработкой переменной $row
как объекта $row->longitude
, а не как массива $row[1]
.Какой из них правильный, зависит от того, как вы получите $rows
, но все равно не следует его смешивать.
PPPS: согласно комментарию ниже, я обновил свой ответ, используя loadAssocList, чтобы получить ассоциативный массиви изменил
'id' => $rowData[0],
'name' => $rowData[1],
на
'id' => $rowData['id'],
'name' => $rowData['name'],
Предполагая, что ваши поля 'id' и 'name' названы соответственно в БД.