2015-03-15 4 views
-1

Я задаю вопрос, который, как я чувствую, не имеет ответа, и мне любопытно, почему.stripos() не распознает первый символ

У меня есть массив тестовых продуктов, в котором перечислены все мои люди 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 - это параметр, который я хочу найти. В этом случае, скажем, Im ищет «Джареда». Всякий раз, когда я запускаю этот код, он говорит мне, что в моем массиве никто не назвал «Джаред»! Однако, когда я просто вставляю «ared» ... он находит «Jared» просто отлично ... Если я помещаю пространство перед «Jared» в поле имени в массиве, то он также отлично работает.

Мой вопрос в том, почему полоса не распознает первый символ в поле имени? Даже когда я использую смещение , он, кажется, не включает в себя первый символ. Есть ли способ обойти это?

Я просто хочу, чтобы иметь возможность искать имена, не помещая пространство перед именем.

+0

Если нет никакого способа, чтобы включить первый символ, (т.е. "0" в строке) в моей формуле выше, используя ** stripos **, является существует другой способ поиска целой строки без необходимости помещать пробел перед именем? Например, $ products [101] = array ( "name" => "(пробел) Jared", "age" => 23, "sex" => "Male"); – jlango7

ответ

1

Согласно PHP manual:

Эта функция может возвращать как логическое значение FALSE, но может также возвращать не-логическое значение, которое приводится к FALSE. Пожалуйста, прочитайте раздел о Booleans для получения дополнительной информации. Используйте оператор === для проверки возвращаемого значения этой функции.

Попробуйте

if (stripos($product["name"], $s) !== false) { 

вместо

+0

Я извиняюсь, во-первых, за то, что не признал очевидного ... «0» может возвращать логическое значение ... для всех, кто читает это, вышеупомянутый ответ сработал для меня. Теперь я понимаю, что есть другие вопросы, которые отвечают на эту тему ... Спасибо Miqi180! – jlango7

+0

Рад помочь. И, пожалуйста, отметьте ответ как принятый. Благодарю. – Miqi180

Смежные вопросы