我问一个我觉得无法回答的问题,我很好奇为什么。
我有一个测试产品数组,其中列出了我的所有人 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 的偏移量,它似乎也不包括第一个字符。有没有办法解决这个问题?
我只是希望能够搜索名称,而无需在名称值前面添加空格。
答案 0 :(得分:1)
根据PHP manual:
此函数可能返回布尔值FALSE,但也可能返回非布尔值,其值为FALSE。有关更多信息,请阅读有关布尔值的部分。使用===运算符测试此函数的返回值。
尝试
if (stripos($product["name"], $s) !== false) {
代替