Добрый день\вечер. Есть массив товаров, в котором нужно найти введенный елемент по названию, делаю так: Код (PHP): $product[]= ['name' => 'motherboard', 'cost' => '350', 'description' => 'description of first product']; $product[]= ['name' => 'hdd', 'cost' => '250', 'description' => 'description of second product']; $product[]= ['name' => 'ssd ', 'cost' => '280', 'description' => 'description of third product']; $search_value = 'ssd'; for($i=0; $i<sizeof($product); $i++) { if ($search_value === $product[$i]['name']) { echo "совпадение найдено"; } } В таком варианте развития событий, я не получаю вообще ничего. Подскажите пожалуйста, в чем ошибка? Но
Спасибо большое, буду внимательнее. Не стану все городить тут, решил задачу вот так: Код (PHP): for($i=0; $i<sizeof($product); $i++) { if ($search_value === $product[$i]['name']) { $index = $i; break; } } echo $product[$index]['name'].'<br />'; echo $product[$index]['cost'].'<br />'; echo $product[$index]['description']; Пример простой, но может быть есть более элегантные решения? Не прошу показывать, просто подскажите на что можно обратить внимание.
foreach проще писать, ещё можно возвращать не индекс, а целиком всю найденную штучку, и с ней дальше работать. Но когда как.
Игорь, наверное тогда Код (PHP): foreach ($product as $i => $p) { У тебя опечатка по ходу, а люди такие вещи не понимают, по опыту. Я как-то запятую пропустил в коде в ответе, так мне чел с претензией: "не работает, ошибку кидает" ))
а, да. я не запускал, на форуме писал, болтая с кем-то =) да. косяк. не заработало бы, озадачился бы чел, однозначно. Спасибо.
Сделал с foreach, все работает. Хотел вот сделать возможность поиска и по desription Код (PHP): $product[] = ['name' => 'ssd', 'price' => '180', 'description' => 'description of third product']; $s = 'third'; \\ любая часть текста из description foreach ($product as $key => $value) { var_dump(strpos($s, $value['description'])); } Получаю false =\ Логика какова - брать введенное в поле и сравнивать с описанием. В strpos $value['description'] является строкой в данном примере, не могу понять почему не отрабатывает =\
потому что строки "дескрипшн оф фёрд продукт" нет в строке "фёрд". открой мануал и прочитай внимательно сигнатуру функции strpos
У strpos другой порядок аргументов. В php-е за этим надо следить. Библиотечные функции писали разные люди, поэтому порядок аргументов у них - как кому нравится. У некоторых сначала $needly, а потом $haystack, у некоторых наоборот. Хорошая IDE с подсказками в этом тебе поможет. Ну и https://php.net/strpos