0

我是这样开始的,但我认为如果我得到更多的物品会太啰嗦了。

$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.

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

4

3 回答 3

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';

}
于 2013-11-06T18:47:51.553 回答
0

使用 strpos 在字符串中搜索字符串。虽然它仍然会很长,但如果用户写“特价商品”,它将帮助您的系统找到“特价商品”。

if (strpos($keyword, 'special') !== false)
   {$keyword_custom_items[]='SPECIAL';}
于 2013-11-06T18:59:06.410 回答
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
  }
于 2013-11-06T20:38:09.550 回答