Forum Moderators: coopster
$bearing = 321;
$cardinalDirections = array(
'N' => array(337.5, 22.5),
'NE' => array(22.5, 67.5),
'E' => array(67.5, 112.5),
'SE' => array(112.5, 157.5),
'S' => array(157.5, 202.5),
'SW' => array(202.5, 247.5),
'W' => array(247.5, 292.5),
'NW' => array(292.5, 337.5)
);
foreach ($cardinalDirections as $dir => $angles) {
if ($bearing >= $angles[0] && $bearing < $angles[1]) {
$direction = $dir;
break;
}
}
echo $direction;
function getDirection($bearing)
{
$cardinalDirections = array(
'N' => array(337.5, 22.5),
'NE' => array(22.5, 67.5),
'E' => array(67.5, 112.5),
'SE' => array(112.5, 157.5),
'S' => array(157.5, 202.5),
'SW' => array(202.5, 247.5),
'W' => array(247.5, 292.5),
'NW' => array(292.5, 337.5)
);
foreach ($cardinalDirections as $dir => $angles)
{
if ($bearing >= $angles[0] && $bearing < $angles[1])
{
$direction = $dir;
break;
}
}
return $direction;
} $thisbearing = 321;
$thisdirection = getDirection($bearing);
//$thisdirection would equal 'NW'
Should result in slightly faster run times.function getDirection($bearing) {
$cardinalDirections = array(
array('N', 337.5, 22.5),
array('NE', 22.5, 67.5),
array('E', 67.5, 112.5),
array('SE', 112.5, 157.5),
array('S', 157.5, 202.5),
array('SW', 202.5, 247.5),
array('W', 247.5, 292.5),
array('NW', 292.5, 337.5)
);
$count = count($cardinalDirections);
for ($i = 0; $i < $count; $i++) {
if ($bearing >= $cardinalDirections[$i][1] && $bearing < $cardinalDirections[$i][2]) {
$direction = $cardinalDirections[$i][0];
$i = $count;
}
}
return $direction;
}