Почему array_search не работает в этом случае? - PullRequest
0 голосов
/ 10 мая 2018

Почему мой в этом коде array_search не работает? Я использую его без $ _POST и все работает хорошо. Но теперь я не могу понять.

<_php

    $arr = array(
        'Tokyo' => 'Japan',
        'Mexico City' => 'Mexico',
        'New York City' => 'USA',
        'Mumbai' => 'India',
        'Seoul' => 'Korea',
        'Shanghai' => 'China',
        'Lagos' => 'Nigeria',
        'Buenos Aires' => 'Argentina',
        'Cairo' => 'Egypt',
        'London' => 'England');

    ?>


    <!doctype html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport"
              content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Document</title>
    </head>
    <body>
        <form method="post" action="exercise.php">
            <select name="city">
                <?php
                    foreach ($arr as $a => $b)
                    {
                        echo "<option>$a</option>";
                    }
                ?>
            </select>

            <input type="submit" value="get a city">

        </form>

        <?php
        if ($_POST)
        {
            $city=$_POST['city'];

            $country=array_search($city, $arr);

            echo "<p>$city is in $country.</p>" ;

        }
        ?>

    </body>
    </html>

Я проверил тип $ country и его строку, также я попытался использовать $ _POST ['city'] вместо $ country, но он все еще не работает. Что я сделал не так?

Ответы [ 2 ]

0 голосов
/ 10 мая 2018

array_search () здесь не работает, так как array_search ищет значения массива, а не ключи.

Поскольку у вас есть ключ, лучший вариант, как предлагает Алекс.Однако вы должны также проверить, что ключ существует первым, используя array_key_exists (), поскольку вы не можете гарантировать, что значение в вашем $ _POST будет одним из тех, которые вы ожидаете, что приведет к генерации E_NOTICE, если нет.

$country = (array_key_exists($city, $arr)) ? $arr[$city] : null; 

array_search () , array_key_exists ()

0 голосов
/ 10 мая 2018

Вам не нужно array_search(), просто используйте значение индекса напрямую:

$city = $_POST['city'];
$country = $arr[$city];
echo "<p>$city is in $country.</p>" ;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...