За последние 24 часа нас посетил 5631 программист и 454 робота. Сейчас ищут 197 программистов ...

Поиск в массиве

Тема в разделе "PHP для новичков", создана пользователем Igine, 12 окт 2018.

  1. Igine

    Igine Гость

    С нами с:
    12 окт 2018
    Сообщения:
    1
    Симпатии:
    0
    Прошу помощи)

    Пользователь передаёт запрос через форму.
    Нужно проверить, есть ли совпадение с данными в массиве. И если есть – вывести.

    Уже голову сломал. Дошел до этого:

    /*сам массив*/
    $arr_dom= [
    array("Имя" => "Adidas Lake Shoes", "Номер" => 125452),
    array("Имя" => "Adidas Dipper Shoes", "Номер" => 125335),
    array("Имя" => "Adidas Mable Shoes", "Номер" => 125758),
    array("Имя" => "Adidas Stan Shoes", "Номер" => 125447),
    array("Имя" => "Nike Mike Shoes", "Номер" => 125544),
    array("Имя" => "Nike Strike Shoes", "Номер" => 145455),
    array("Имя" => "Nike Spyke Shoes", "Номер" => 147565),
    array("Имя" => "Nike Bike Shoes", "Номер" => 125668),
    ];

    /*проверка и вывод*/
    $needle=$_POST["firstname"];
    $poisk = array_search("$needle", $arr_dom);

    for ($i=0; $i < sizeof($arr_dom); $i++) {
    if ($i === $poisk) {
    foreach ($arr_dom[$i] as $key => $value) {
    echo $value." ";
    }
    } else {
    echo "Совпадений нет";
    }
    }

    Чувствую, что где-то близко, но знаний не хватает.
     
  2. MouseZver

    MouseZver Старожил

    С нами с:
    1 апр 2013
    Сообщения:
    4.768
    Симпатии:
    770
    Адрес:
    Лень
    PHP:
    1. foreach ( $arr_dom AS $column )
    2. {
    3.   if ( $column['Имя'] === $_POST['firstname'] ?? null )
    4.   {
    5.   echo $column['Имя'] . ' - ' . $column['Номер'];
    6.   }
    7. }
     
  3. Maputo

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

    С нами с:
    30 июл 2015
    Сообщения:
    1.044
    Симпатии:
    162
    Оформляйте код в специальные блоки. Кнопка </> . Не забудьте выбрать язык.
    Функция array_search() с вероятностью 99% будет выдвать false. Вот эти строки бессмыслены:
    PHP:
    1. $needle=$_POST["firstname"];
    2. $poisk = array_search("$needle", $arr_dom);
    Алгоритм вполне сойдет подобного плана:
    PHP:
    1. $key = -1;
    2. if (isset($_POST['firstname'])) {
    3.     foreach ($arr_dom as $k => $value) {
    4.         if ($value['Имя'] == $_POST['firstname']) {
    5.             $key = $k;
    6.         }
    7.     }
    8. }
    В этом случае в $key будет либо -1, либо ключ массива. Со значением $key при инициализации можно поиграться - это может быть false, null - любое значение, которое не может оказаться в качестве ключа массива $arr_dom.
    По значению ключа делается вывод - либо значения из массива, либо надпись, что совпадений не найдено.