Примечание: неопределенное смещение: 0 (многомерные ассоциативные массивы) - PullRequest
0 голосов
/ 04 мая 2020

Кто-нибудь знает, почему я получаю ошибку? Я пробовал это много раз, и я не могу понять это.
Что не так с моим кодом?
Цель состоит в том, чтобы вычислить расстояния между двумя городами на основе названий городов, заданных пользователем, используя ввод данных формы.

<form action="eudistance.php" method="post">
    <input type="text" name="Start" placeholder="Start City...">
    <input type="text" name="End" placeholder="End City...">
    <input type="submit" name="submit" value="Calculate">
</form>
$Distances = array(
            "Berlin" => array("Berlin" => 0, "Moscow" => 1607.99, "Paris" => 876.96, "Prague" => 280.34, "Rome" => 1181.67),
            "Moscow" => array("Berlin" => 1607.99, "Moscow" => 0, "Paris" => 2484.92, "Prague" => 1664.04, "Rome" => 2374.26),
            "Paris" => array("Berlin" => 876.96, "Moscow" => 641.31, "Paris" => 0, "Prague" => 885.38, "Rome" => 1105.76),
            "Prague" => array("Berlin" => 280.34, "Moscow" => 1664.04, "Paris" => 885.38, "Prague" => 0, "Rome" => 922),
            "Rome" => array("Berlin" => 1181.67, "Moscow" => 2374.26, "Paris" => 1105.76, "Prague" => 922, "Rome" => 0)
);

if(isset($Distances)) {
    for ($i = 0; $i < count($Distances); $i++) {
        for ($d = 0; $d < count($Distances[$i]); $d++) {
            if(($_POST['start'] == $Distances[$i]) && ($_POST['end'] == $Distances[$i][$d])) {
                print $Distances[$i] * $Distances[$i][$d];
            }   
        };
    };
} else {
    echo "Array does not exist";
}

1 Ответ

0 голосов
/ 04 мая 2020

Вы пытаетесь получить доступ к ассоциативному массиву с помощью числовых ключей c, который не будет работать. Однако ваш код может быть написан намного проще, просто индексируя массив $Distances с помощью $_POST['start'] и $_POST['end']:

echo $Distances[$_POST['start']][$_POST['end']] ?? 'Unknown';

Например, если $_POST = array('start' => 'Paris', 'end' => 'Berlin'), то это дает

876.96

Если возможно, что $_POST['start'] или $_POST['end'] не может быть установлен, использование этого кода предотвратит предупреждения:

if (isset($_POST['start'], $_POST['end'], $Distances[$_POST['start']][$_POST['end']])) {
    echo $Distances[$_POST['start']][$_POST['end']];
}
else {
    echo "Unknown";
}

Демонстрация на 3v4l.org

...