我一开始就是这样,但决定如果我得到更多的项目,那就太长了。
$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.
除了需要复制复数单词外,这不允许近似匹配。解决这个问题的更好方法是什么?
您可以使用正则表达式匹配。见 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';
}
使用 strpos 在字符串中搜索字符串。虽然它仍然会很长,但如果用户写"specials",它将帮助您的系统找到"特殊"。
if (strpos($keyword, 'special') !== false)
{$keyword_custom_items[]='SPECIAL';}
我最终这样做了:
$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
}