stripos()不识别第一个字符

时间:2015-03-15 22:41:38

标签: php 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()中提取所有产品,然后循环浏览产品,找到" name"中的字符串。与搜索匹配的字段

   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 是我想要搜索的参数。在这种情况下,让我说我正在寻找Jared"。每当我运行这段代码时,它就会告诉我没有一个名字" Jared"在我的阵列中! 然而当我只是插入" ared" ...它找到" Jared"很好......如果我在" Jared"前面放一个空间在数组的名称字段中,它也可以正常工作。

我的问题是:为什么没有条带识别名字字段中的第一个字符?即使我使用 0 的偏移量,它似乎也不包括第一个字符。有没有办法解决这个问题?

我只是希望能够搜索名称,而无需在名称值前面添加空格。

1 个答案:

答案 0 :(得分:1)

根据PHP manual

  

此函数可能返回布尔值FALSE,但也可能返回非布尔值,其值为FALSE。有关更多信息,请阅读有关布尔值的部分。使用===运算符测试此函数的返回值。

尝试

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

代替