-1

我在问一个我觉得没有答案的问题,我很好奇为什么。

我有一个测试产品数组,列出了我所有的人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是我希望搜索的参数。在这种情况下,假设我正在搜索“Jared”。每当我运行这段代码时,它都会告诉我数组中没有名为“Jared”的人!但是,当我只插入“ared”时......它发现“Jared”很好......如果我在数组的名称字段中的“Jared”前面放置一个空格,那么它也可以正常工作。

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

我只想能够搜索名称,而不必在名称值前面放置一个空格。

4

1 回答 1

3

根据PHP 手册

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

尝试

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

反而

于 2015-03-15T23:01:40.887 回答