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) {
改为
我在问一个我觉得没有答案的问题,我很好奇为什么。
我有一个测试产品数组,其中列出了我所有的人 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) {
改为