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

but 发布于 2019-03-09 php 最后更新 2019-03-09 14:38 3 浏览

我期望开发一个搜索功能,允许用户只搜索该项目,或用括号内的价格范围修改搜索。也就是说,如果他们正在寻找一辆汽车,那么他们可以进入任一辆汽车并接收数据库中的所有汽车,或者他们可以进入汽车(100,299)或汽车(100,299),并且只接收数据库中的汽车价格范围从100到299。 在我做的是三个不同的爆炸函数调用之前,但这很麻烦,看起来很丑陋。我也试图把括号放在一个数组中,然后将它与搜索到的单词进行比较(一个单词基本上是一个字符数组),但那不起作用。最后,我一直在阅读strpos和substr,但他们似乎不符合要求,因为strpos返回字符的第一个出现,substr在特定事件发生后返回指定长度内的字符。 因此,例如strpos的问题是用户可以输入(也可以不输入)括号,我会通过谁知道什么来调用我的搜索功能。例如,substr的问题在于价格范围可能大不相同。

已邀请:

dodit

赞同来自:

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

if (preg_match('/car ?\(([^,]+), ?([^\)]+)\)/', $search_text, $matches)) {
    $low_price = $matches[1];
    $high_price = $matches[2];
//do your price filtering here
}
正则表达式可能需要稍微调整,我不记得是否需要在字符类中转义括号。

nin

赞同来自:

是的,山姆是对的。你应该用正则表达式来做这件事。 在文档中查找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开始,而不是一个。