За последние 24 часа нас посетили 20113 программистов и 1082 робота. Сейчас ищут 714 программистов ...

array_search неправильно работает

Тема в разделе "PHP для новичков", создана пользователем Killian, 24 сен 2021.

Метки:
  1. Killian

    Killian Новичок

    С нами с:
    24 сен 2021
    Сообщения:
    9
    Симпатии:
    0
    Здравствуйте, изучаю язык только неделю, добрался до массивов. Программа должна выдать данные о человеке если он есть в массиве, иначе написать что такого человека нет. Проблема в том, что в любом случае он выдает что его нет. В переменную Found всегда приходит false. С чем связана ошибка и как ее исправить? Заранее благодарю за помощь
    PHP:
    1. <form method ='POST' >
    2. <p> Введите фамилию <input type ='string' name = 'name'></p>
    3. <p><input type="submit" name="submit" value="отправить"> </p>
    4. <br>
    5. <?php
    6. $people = array("Сеченов" => array("Имя" => "Виктор", "Дата рождения" => "05.12.2000"),
    7.                          "Горохина"=> array("Имя" => "Кира", "Дата рождения" => "11.12.2000"),
    8.                          "Кудяев"=> array("Имя" => "Сергей", "Дата рождения" => "27.11.2000"),
    9.                          "Языкова"=> array("Имя" => "Дарья", "Дата рождения" => "09.06.2000"),
    10.                        "Филенков"=> array("Имя" => "Антон", "Дата рождения" => "24.01.2000")
    11.                         );
    12. if (isset($_POST['submit'])){
    13. $Surname = $_POST['name'];
    14. $Found = array_search("$Surname", $people);
    15. if ($Found === false) {
    16.    echo "Такого человека нет";
    17. } else {
    18. echo $people [$Surname]["Имя"] ["Дата рождения"]; }
    19. print_r($people);
    20. }
    21. ?>
    От модератора: Пользуйтесь кнопкой </> для вставки кода
     
    #1 Killian, 24 сен 2021
    Последнее редактирование модератором: 24 сен 2021
  2. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.734
    Симпатии:
    1.315
    Адрес:
    Лень
    ваш запрос успешно доставлен преподавателю.
    За неделю освоил синтаксис... POST/GET уже понимает, массивы пишет, функции, условия... и тут на - ничего не работает и хз почему.

    Врут и не краснеют.
     
    #2 MouseZver, 24 сен 2021
    Последнее редактирование: 24 сен 2021
  3. Drunkenmunky

    Drunkenmunky Активный пользователь

    С нами с:
    12 авг 2020
    Сообщения:
    1.476
    Симпатии:
    281
    Перечитайте мануал к array_search() и уже использованной в коде isset()
     
  4. KingdaKa

    KingdaKa Новичок

    С нами с:
    7 сен 2021
    Сообщения:
    87
    Симпатии:
    16
    1. Функция array_search: Осуществляет поиск данного значения в массиве и возвращает ключ первого найденного элемента в случае успешного выполнения.

    Для поиска по ключу стоит юзать array_key_exists

    Кроме того можно проверить установлен ли этот элемент массива по ключу:

    Код (Text):
    1. if (!isset($people[$Surname])) {echo "Такого человека нет";
    2.         } else {...}
    Но лучше array_key_exists т.к. в случае, если человек, например, стёрт из базы и теперь там вместо его данных null функция вернёт true.

    2. Зачем в 18-й строке вы обращаетесь к 3-х мерному массиву? У вас он двумерный.

    Код (Text):
    1. echo $people[$Surname]["Имя"] . ' ' . $people[$Surname]["Дата рождения"];
     
  5. Killian

    Killian Новичок

    С нами с:
    24 сен 2021
    Сообщения:
    9
    Симпатии:
    0
    Спасибо за помощь, программа заработала
    --- Добавлено ---
    Спасибо за помощь
    --- Добавлено ---
    изучаю действительно где-то неделю, т.к обучение того требует. Вглубь капать время на парах и дома не позволяет, изучаем только так, поэтому и ошибки есть у меня, ибо не все полностью понимаю
     
  6. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.548
    Симпатии:
    1.754
    А потом приходят такие на работу, и им надо самые основы объяснять. Как я недавно одному объяснял, почему рекурсия работает. Спрашиваю: "Что вам читали"? Перечисляет кучу языков, в том числе ассемблер. Я ему: "Вам читали ассемблер, и ты не в курсе что такое стек вызовов?"
     
  7. KingdaKa

    KingdaKa Новичок

    С нами с:
    7 сен 2021
    Сообщения:
    87
    Симпатии:
    16
    Хм, в ассемблере при вызове процедуры в стек кладётся адрес возврата и вообще стек один из основных инструментов работы процессора, странно o_O

    Офф:
    Вообще меня очень удивило, когда я стал читать раздел - народ пишет какие-то уже нетривиальные вещи, работает с json, какими-то библиотеками и т.д. при этом вообще не понимая как работают массивы, синтаксис, типы данных и т.д. Очень странно как они вообще что-то пишут и неужели на фрилансе?
     
  8. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.068
    Симпатии:
    1.231
    Адрес:
    там-сям
    Потому что они копипастой программируют. До какого-то невысокого уровня может прокатить, потом крушение самооценки, депрессия, запой...
     
    KingdaKa и don.bidon нравится это.