我在我的项目中面临一个问题。我有一个产品名称的列表
最佳营养100乳清蛋白-黄金标准巧克力薄荷2.07磅 最佳营养100乳清蛋白-金标(天然)香草1.9磅 最佳营养100乳清蛋白-黄金标准巧克力薄荷2.07磅 ‘最佳营养100乳清蛋白-黄金标准巧克力花生黄油3.31磅’ ‘最佳营养100乳清蛋白-黄金标准的关键石灰派1.81磅’ ‘最佳营养100乳清蛋白-金盐焦糖1.81磅’ 最佳营养100乳清蛋白-金标准香草冰淇淋2.07磅
所有这些产品都保存在产品表中。
然后我又有了另一张存储大小类别的表。
"1磅,3.3磅,8磅,1.8磅,3磅,10磅,5磅,2磅,2.91磅,2.47磅,2.5磅“
我正在对产品进行分类,以便如果在产品名称中找到大小,那么产品将被分配到该大小类别中。
例如
最佳营养100乳清蛋白-金标准双富巧克力1磅
在这个产品中,我们有大小1磅和1磅也存在于我们的大小类别表中,那么产品将被分配到1磅类别。
为此,我使用以下正则表达式:
preg_match("/[\s]+\b$size\b/", $product_name) OR
preg_match("/[\-]+\b$size\b/", $product_name) OR
preg_match("/\b$size\b/", $product_name) 其中,$size是我从size分类表获得的大小,而$product_name是产品的名称,它目前对我来说很好。
现在,如果产品中有一个特定的大小,但在size分类表中不存在,那么该产品应该分配给最接近的大小类别。
例如
最佳营养100乳清蛋白-黄金标准巧克力薄荷2.07磅
2.07磅在我的尺寸类别表中不存在,那么这个产品应该分配给2磅或2.47磅的类别。
发布于 2016-07-05 09:52:54
如果数据库包含2.00和2.10,那么
最佳营养100乳清蛋白-黄金标准巧克力薄荷2.07磅
步骤1: Regex:查找2.07
您需要一个与2.07 lbs匹配的正则表达式,例如
$haystack = 'Optimum Nutrition 100 Whey Protein - Gold Standard Chocolate Mint 2.07 lbs';
preg_match('/(07)\slbs/', $haystack, $matches); // you still have to do some howework here
print_r($matches);我让您以一种通用和健壮的方式匹配2.07。您可以在http://regex101.com或http://www.phpliveregex.com/上测试正则表达式。
步骤2: SQL:
步骤3: PHP:确定哪个值最近。
例如2.10
发布于 2016-07-05 08:00:35
$search_product='2.07 Lbs';
$available_products=array('2 Lbs','2.91 Lbs','2.47 Lbs','2.5 Lbs');
for($i=0;$i<count($available_products);$i++){
if(!isset($closet_value)){
$closet_diff=abs($search_product-$available_products[$i]);
$closet_value=$available_products[$i];
}else if($closet_diff>abs($search_product-$available_products[$i])){
$closet_diff=abs($search_product-$available_products[$i]);
$closet_value=$available_products[$i];
}
}
echo $closet_value;2磅
https://stackoverflow.com/questions/38197586
复制相似问题