【问题标题】:How to find if two characters are in an array php如何查找两个字符是否在数组php中
【发布时间】:2013-04-11 16:26:55
【问题描述】:

我正在寻求开发一种搜索功能,允许用户只搜索商品,或使用括号中的价格范围修改搜索。也就是说,如果他们正在寻找汽车,那么他们可以输入任一汽车并接收数据库中的所有汽车,或者他们可以输入汽车 (100, 299) 或汽车(100, 299) 并仅接收数据库中的汽车价格范围在100到299之间。

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

例如,strpos 的问题是用户可以只输入(而不是)括号,我将调用我的搜索功能,谁知道呢。例如,substr 的问题是价格范围可能变化很大。

【问题讨论】:

  • 我建议像许多当前网站一样使用搜索过滤器,而不是使用括号搜索关键字。用户将很难使用非标准关键字搜索。
  • 我也是这么想的。起初我有另外两个搜索输入字段,分别表示最低和最高价格。然而,它看起来很丑陋,并不是很独特。我正在尝试开发一个分类网站,您可以在任何价格范围内搜索您想要的内容,而无需稍后修改您的搜索。

标签: php substr strpos


【解决方案1】:

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

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

    //do your price filtering here
}

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

【讨论】:

  • 感谢您的快速响应,非常感谢。
【解决方案2】:

是的,山姆是对的。您应该使用正则表达式来做到这一点。

在文档中查找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 开始,而不是 1。

【讨论】:

  • 非常感谢您的快速响应。
  • 那个正则表达式肯定行不通 - 它需要在开始和结束处使用分隔符,并且需要子模式来单独捕获数字。
  • 是的,对不起,我用这个正则表达式编辑了代码:^([a-zA-Z]+)\s(([0-9]+),([0-9 ]+))$
猜你喜欢
  • 2014-03-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-06
  • 2017-05-05
  • 2014-11-24
  • 2012-03-16
  • 2020-06-21
  • 2016-03-21
相关资源
最近更新 更多