【问题标题】:partial match in a PHP in_array() [duplicate]PHP in_array() 中的部分匹配
【发布时间】:2014-02-17 20:16:12
【问题描述】:

我正在尝试在数组中搜索单词(区域)列表。

但有时数组中的单词(区域)是 2 个单词。

即在数组中是“Milton Keynes”,所以“Milton”没有被匹配

我有什么办法可以做到这一点,而无需拆分数组中的任何双字(因为我认为这将对服务器造成很大的负担)

下面是我正在做的一个例子

foreach (preg_split("/(\s)|(\/)|(\W)/", $words) as $word){                  
    if (in_array($word, $areaArray)){
       $AreaID[] = array_search($word, $areaArray);
    }
}

感谢,一如既往的任何建议!

【问题讨论】:

  • in_array 仅适用于完全匹配。你必须遍历你的数组并自己寻找那些部分匹配。
  • 准备您的单词列表以使用替代词Milton|Keys|... 并使用preg_grep

标签: php arrays


【解决方案1】:

你可以使用preg_grep():

$re = sprintf('/\b%s\b/', preg_quote($search, '/'));
// ...
if (preg_grep($re, $areaArray)) {
    // we have a match
}

您可以通过添加 /i 修饰符来选择使匹配不区分大小写。

【讨论】:

  • 这将适用于不区分大小写的完全匹配
  • @EmilioGort 不确定你的意思。你是说它不起作用?
  • 它有效...向操作解释正则表达式中的边界
【解决方案2】:

你可以使用正则表达式来查找一个值,这将类似于 MySQL 的函数

$search='Milton Keynes';
foreach ($areaArray as $key => $value) {
 if (preg_match('~'.preg_quote($search).'~i',$value)) {
    echo "$key";
 }
}

【讨论】:

  • 我会添加 preg_quote() 以确保模式在包含一些“特殊”字符时不会中断。
  • 也有语法错误。 search 应该是 $search。另外,你为什么在里面使用额外的引号?
  • @AmalMurali 谢谢,已修复,是一个错字
猜你喜欢
  • 1970-01-01
  • 2018-03-17
  • 1970-01-01
  • 1970-01-01
  • 2019-04-09
  • 1970-01-01
  • 2016-01-08
  • 2012-04-07
  • 1970-01-01
相关资源
最近更新 更多