Скрипт вывода данных из массива
$cars = [
['name' => 'Такси 1', 'position' => rand(0, 1000), 'isFree' => (bool) rand(0, 1)],
['name' => 'Такси 2', 'position' => rand(0, 1000), 'isFree' => (bool) rand(0, 1)],
['name' => 'Такси 3', 'position' => rand(0, 1000), 'isFree' => (bool) rand(0, 1)],
['name' => 'Такси 4', 'position' => rand(0, 1000), 'isFree' => (bool) rand(0, 1)],
['name' => 'Такси 5', 'position' => rand(0, 1000), 'isFree' => (bool) rand(0, 1)],
];
name - название машины, position - ее положение, isFree - признак свободна или занята.
Должен определить самое ближайшее и свободное такси до пассажира, который хочет куда-то поехать.
Положение пассажира также случайная величина, он может стоять в любой точке: $passenger = rand(0, 1000);
Напишите скрипт, который для каждого такси будет выводить строку, вида:
<Название машины>, строит на <км, где стоит машина> км, до пассажира <км до пассажира> км (<занят/свободен>)</ - едет это такси>
Например:
"Такси 1, стоит на 15 км, до пассажира 3 км (занят)"
"Такси 2, стоит на 0 км, до пассажира 12 км (свободен) - едет это такси"
"Такси 3, стоит на 300 км, до пассажира 288 км (свободен)"
Нельзя создавать свои функции
Данные и структуру массива менять запрещено.
Трудность вызвало "Должен определить самое ближайшее и свободное такси до пассажира, который хочет куда-то поехать." Ниже код который у меня получился:
foreach ($cars as $k => $car) {
echo $car['name'].", стоит на ".$car['position']." км, до пассажира ".(abs ($car['position'] - $passenger))." км ";
if ($car['isFree'] == true) {
echo "(свободен)";
if ($car['name'] == $cars[$k]['name'] && $car['isFree'] == true) {
echo " - едет это такси";
}
}
else {
echo "(занят)";
}
echo PHP_EOL;
}
Но оно не определяет ближайшее и свободное такси. Либо все разом пишет, либо через раз срабатывает(Я пробовал разные вариации, не понимаю как сделать без функции).
Ответы (1 шт):
Все заработало когда я написал вот так:
foreach($cars as $car) {
$position = abs($car['position'] - $passenger);
if ($car['isFree'] && (!isset($minPosition) || $position < $minPosition)) {
$minPosition = $position;
$name = $car['name'];
}
}
foreach($cars as $car) {
echo $car['name'] . " стоит на " . $car['position'] . " км, до пассажира " . abs($car['position'] - $passenger)." км (" . ($car['isFree'] ? "свободен" : "занят") . ")" . ($car['name'] == $name ? " - едет это такси" : "") . "<br>";
}