Я задаю вопрос, который, по моему мнению, не имеет ответа, и мне любопытно, почему.
У меня есть массив тестовых продуктов, в котором перечислены все мои люди get_products_all ().
function get_products_all() {
$products = array();
$products[101] = array(
"name" => "Jared",
"age" => 23,
"sex" => "Male");
$products[102] = array(
"name" => "Gen",
"age" => 21,
"sex" => "Female");
$products[103] = array(
"name" => "Noah",
"age" => 24,
"sex" => "Male");
return $products;
}
Затем у меня есть функция поиска, которая вытягивает все продукты из get_products_all () и просматривает продукты, чтобы найти строку в поле «имя», которая соответствует поиску
function get_products_search($s) {
$results = array();
$all = get_products_all();
foreach($all as $product) {
if (stripos($product["name"], $s)) {
$results[] = $product;
}
}
return $results;
}
Как вы видете, $ s это параметр, по которому я хочу искать. В этом случае, скажем, я ищу «Джаред». Всякий раз, когда я запускаю этот код, он говорит мне, что в моем массиве нет никого по имени «Джаред»! тем не мение когда я просто вставляю «ared» … он находит «Jared» просто отлично … Если я поставлю пробел перед «Jared» в поле имени в массиве, то он также будет работать нормально.
У меня такой вопрос: почему стрипы не распознают первый символ в поле имени? Даже когда я использую смещение 0 это, кажется, не включает первый символ. Есть ли способ обойти это?
Я просто хочу иметь возможность искать имена без необходимости ставить пробел перед значением имени.
Согласно Руководство по PHP:
Эта функция может возвращать логическое значение FALSE, но также может возвращать и не булево значение, которое оценивается как FALSE. Пожалуйста, прочитайте раздел о логических значениях для получения дополнительной информации. Используйте оператор === для проверки возвращаемого значения этой функции.
Пытаться
if (stripos($product["name"], $s) !== false) {
вместо
Других решений пока нет …