如何查找php数组中是否有两个字符

如何查找php数组中是否有两个字符,php,substr,strpos,Php,Substr,Strpos,我期待着开发一个搜索功能,允许用户只搜索项目,或修改他们的搜索与括号中的价格范围。也就是说,如果他们正在寻找一辆汽车,那么他们可以输入car并接收数据库中的所有汽车,或者他们可以输入car(100299)或car(100299)并只接收数据库中价格范围为100到299的汽车 之前我做的是三个不同的explode函数调用,但这很麻烦,看起来非常丑陋。我还尝试将括号放在一个数组中,然后将其与搜索的单词(一个单词基本上是一个字符数组)进行比较,但这不起作用。最后,我阅读了strpos和substr,但

我期待着开发一个搜索功能,允许用户只搜索项目,或修改他们的搜索与括号中的价格范围。也就是说,如果他们正在寻找一辆汽车,那么他们可以输入car并接收数据库中的所有汽车,或者他们可以输入car(100299)或car(100299)并只接收数据库中价格范围为100到299的汽车

之前我做的是三个不同的explode函数调用,但这很麻烦,看起来非常丑陋。我还尝试将括号放在一个数组中,然后将其与搜索的单词(一个单词基本上是一个字符数组)进行比较,但这不起作用。最后,我阅读了strpos和substr,但它们似乎不符合要求,因为strpos返回第一次出现的字符,而substr返回特定出现后指定长度内的字符


例如,strpos的问题是,用户只需输入(不输入)括号,我就可以使用who-knowledge调用我的搜索函数。例如,substr的问题是价格范围可能变化很大。

您可以使用preg\u match解析搜索字符串-我假设这就是您遇到问题的部分

if (preg_match('/car ?\(([^,]+), ?([^\)]+)\)/', $search_text, $matches)) {
    $low_price = $matches[1];
    $high_price = $matches[2];

    //do your price filtering here
}

正则表达式可能需要一些调整,我不记得是否需要在字符类中转义括号。

是的,Sam是对的。您应该使用正则表达式来实现这一点

在文档中查找

为了完成他的回答,您案例的正则表达式为:

$regex = "^([a-zA-Z]+)\s\(([0-9]+),([0-9]+)\)$"

if (preg_match($regex, $search_text, $matches)) {
    $type = $matches[0];
    $low_price = $matches[1];
    $high_price = $matches[2];

    //do your price filtering here
}

请小心,因为包含匹配项的数组从索引0开始,而不是从索引1开始。

我建议像许多当前网站一样使用搜索筛选器,而不是使用括号搜索关键字。用户将很难使用非标准的关键字搜索。我也这么想。起初,我有两个其他搜索输入字段,表示最小和最大价格。然而,它看起来很丑,并不是真正独特的。我正在尝试开发一个分类广告网站,你可以在任何价格范围内搜索你想要的内容,以后不必修改你的搜索。非常感谢你的快速响应。非常感谢你的快速响应。这个正则表达式肯定行不通-它的开始和结束都需要分隔符,和子模式来分别捕获数字。是的,对不起,我用这个正则表达式编辑了代码:^([a-zA-Z]+)\s([0-9]+),([0-9]+)$