当每个项目可能包含多个关键字(或短语)时,如何根据关键字从列表中选择项目

时间:2013-11-06 18:42:37

标签: php arrays search

我是这样开始的,但如果我得到更多的物品,我觉得这会太长时间了。

$keyword=getKeyword();

switch (true)
  {
    case $keyword=='special product':
    $keyword_custom_items[]='SPECIAL';
    break;

    case ($keyword=='other special' || $keyword=='other specials' || $keyword=='more specials'):
    $keyword_custom_items[]='EXTRA-SPECIAL';
    break;

    default:
    break;
  }

// handle custom items if $keyword_custom_items is set.

除了需要复制自己的复数词,这不允许近似匹配。 解决这个问题的更好方法是什么?

3 个答案:

答案 0 :(得分:0)

您可以使用正则表达式匹配。 见http://php.net/manual/en/function.preg-match.php

或者如果你只是转换几个$ keyword的案例,你可以:

switch ($keyword) {
    case "special product":
       $keyword_custom_items[]='SPECIAL';
       break;
    case "other special":
    case "other specials":
    case "more specials":
       $keyword_custom_items[]='EXTRA-SPECIAL';
       break;
    default:
       $keyword_custom_items[]='NONE';

}

答案 1 :(得分:0)

使用strpos搜索字符串中的字符串。虽然它仍然相当冗长,但如果用户写“特殊”,它将帮助您的系统找到“特殊”。

if (strpos($keyword, 'special') !== false)
   {$keyword_custom_items[]='SPECIAL';}

答案 2 :(得分:0)

我最终这样做了:

$keyword_to_item=array(
'blender bottles'=>'MIX-IT',
'shaker bottles'=>'MIX-IT',
'shaker cups'=>'MIX-IT',
'mixer bottles'=>'MIX-IT',
'protein mixer'=>'MIX-IT',
'protein shaker'=>'MIX-IT',
);

if(!function_exists(keyword_search)){ //THIS IS IN A LOOP, SO MAKE SURE WE DO NOT REDECLARE
function keyword_search($val)
  {
    global $promotional;
    $lc_keyword=strtolower($promotional);
    similar_text($lc_keyword,$val,$similarity);
    return $similarity > 70;
  }
}
$found=array_filter(array_keys($keyword_to_item),"keyword_search");

$found=array_values($found);
foreach((array)$keyword_to_item[$found[0]] as $item)
  {
    //DO STUFF
  }