I would like to create a function that returns the closest city (and the remaining distance to the city) from an array.
The numbers in the array represent the distance from the Starting point. $currentPosition is the current distance from the starting point.
E.g. at $currentPosition = 80, getCity() should return [60, ‘München’]. But at the moment, it returns [-80, null];
Unfortunately, it does not work as planned.
So this is my code:
$cities= [
[ 70, "Ingolstadt" ],
[ 140, "München" ],
[ 234, "Innsbruck" ],
[ 443, "Venedig" ],
[ 622, "Florenz" ],
[ 835, "Rom" ],
[ 973, "Neapel" ],
];
function getCity( $currentPosition) {
for ($i=0; ;) {
if ( $currentPosition > $cities[$i][0] && $currentPosition < $cities[$i+1][0] ) {
$i++;
}else {
$distance = $cities[$i][0] - $currentPosition;
$city= $cities[$i][1];
return array( $distance , $city);
break;
}
}
}
Advertisement
Answer
Try this one
<?php
$cities = [
[ 70, "Ingolstadt" ],
[ 140, "München" ],
[ 234, "Innsbruck" ],
[ 443, "Venedig" ],
[ 622, "Florenz" ],
[ 835, "Rom" ],
[ 973, "Neapel" ],
];
$diff = 2147483647;
$pos = 0;
function getCity($currentPosition) {
global $cities;
global $diff;
global $pos;
for ($i=0; $i<count($cities); $i++) {
if($cities[$i][0] > $currentPosition) {
if(($cities[$i][0] - $currentPosition) < $diff) {
$diff = $cities[$i][0] - $currentPosition;
$pos = $i;
}
}
}
return "Nearest city is " . $cities[$pos][1] . " and the left distance is " . $diff;
}
?>
<!DOCTYPE html>
<html>
<body>
<h1><?php echo getCity(80); ?></h1>
</body>
</html>