如何找到两个字符是否在数组php中

时间:2013-04-11 16:26:55

标签: php substr strpos

我希望开发一种搜索功能,允许用户只搜索该项目,或者用括号中的价格范围修改他们的搜索。也就是说,如果他们正在寻找汽车,那么他们可以进入汽车并接收数据库中的所有汽车,或者他们可以进入汽车(100,299)或汽车(100,299)并且只接收数据库中的汽车价格范围为100至299。

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

因此,例如strpos的问题是用户可以只输入(和没有)括号,我将调用我的搜索功能,谁知道什么。例如,substr的问题是价格范围可能会有很大差异。

2 个答案:

答案 0 :(得分:0)

您可以使用preg_match来解析搜索字符串 - 我假设这是您遇到问题的部分。

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

    //do your price filtering here
}

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

答案 1 :(得分:0)

是的,Sam是对的。你应该用正则表达式来做这件事。

在文档

上查找preg_match()

要完成答案,您案例的正则表达式为:

$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开始,而不是一个。