我是这样开始的,但如果我得到更多的物品,我觉得这会太长时间了。
$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.
除了需要复制自己的复数词,这不允许近似匹配。 解决这个问题的更好方法是什么?
答案 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
}