Söz konusu kod 2. foreach döngüsü içinde bulunan kodu, amacı tam yinelenen enlem ve boylamları önlemektir.
foreach($aUsers as $k => $v)
{
// generate address
$aAddress = array();
if(!empty($v['city_location']))
$aAddress[] = $v['city_location'];
if(!empty($v['country_child_id']))
{
$aRow = $oDb->select('name')
->from(getT('country_child'))
->where('child_id = \''.$v['country_child_id'].'\'')
->execute('getRow');
$aAddress[] = $aRow['name'];
}
if(!empty($v['postal_code']))
$aAddress[] = $v['postal_code'];
if(!empty($v['country_iso']))
{
$aRow = $oDb->select('name')
->from(getT('country'))
->where('country_iso = \''.$v['country_iso'].'\'')
->execute('getRow');
$aAddress[] = $aRow['name'];
}
$sAddress = implode(', ',$aAddress);
/// get location
$aLatLon = $oGeoMap->getLatLon($v['user_id'],1,$sAddress);
if($aLatLon['success'] === true)
{
foreach($aUsers as $k2 => $v2)
{
$iAdd = .01;
$iAttempts = 0;
while($v2['latitude'] == $aLatLon['latitude'] && $v2['longitude'] == $aLatLon['longitude'])
{
$iAttempts++;
switch($iAttempts){
case 1:
$aLatLon['latitude'] += $iAdd;
break;
case 2:
$aLatLon['longitude'] += $iAdd;
break;
case 3:
$aLatLon['latitude'] += $iAdd;
$aLatLon['longitude'] += $iAdd;
break;
case 4:
$aLatLon['latitude'] -= $iAdd;
$aLatLon['longitude'] -= $iAdd;
break;
case 5:
$aLatLon['latitude'] += $iAdd;
$aLatLon['longitude'] -= $iAdd;
break;
case 6:
$aLatLon['latitude'] -= $iAdd;
$aLatLon['longitude'] += $iAdd;
break;
case 7:
$iAdd += .01;
$iAttempts = 0;
break;
}
}
}
$aUsers[$k]['latitude'] = $aLatLon['latitude'];
$aUsers[$k]['longitude'] = $aLatLon['longitude'];
$aUsers[$k]['address'] = $sAddress;
}
else
unset($aUsers[$k]);
}