stripos() 不识别第一个字符

stripos() doesnt recognize first character

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

我有一个测试产品数组,其中列出了我所有的人 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"很好...如果我在[=35前面放一个space =] 在数组的名称字段中,那么它也可以正常工作。

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

我只是希望能够搜索名称而不必在名称值前面加上 space。

根据 PHP manual:

This function may return Boolean FALSE, but may also return a non-Boolean value which evaluates to FALSE. Please read the section on Booleans for more information. Use the === operator for testing the return value of this function.

尝试

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

改为