查找最接近的值

时间:2016-07-05 07:26:52

标签: php mysql

我在项目中遇到了一个问题。我有一个产品名称列表,如

  

'Optimum Nutrition 100乳清蛋白 - 黄金标准巧克力薄荷2.07磅'

     

'Optimum Nutrition 100乳清蛋白 - 黄金标准(自然)香草1.9磅'

     

'Optimum Nutrition 100乳清蛋白 - 黄金标准巧克力薄荷2.07磅'

     

'Optimum Nutrition 100乳清蛋白 - 黄金标准巧克力花生酱3.31磅'

     

'Optimum Nutrition 100乳清蛋白 - 金标准关键酸橙馅饼1.81磅'

     

'Optimum Nutrition 100乳清蛋白 - 黄金标准盐味焦糖1.81磅'

     

'Optimum Nutrition 100乳清蛋白 - 黄金标准香草冰淇淋2.07磅'

所有这些产品保存在产品表中

然后我有另一个存储大小类别的表。

  

“1磅,3.3磅,8磅,1.8磅,3磅,10磅,5磅,2磅,2.91磅,2.47磅,2.5磅”。

我正在对产品进行分类,以便如果在产品名称中找到尺寸,那么该产品将被分配到该尺寸类别。

例如

  

“Optimum Nutrition 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是我从尺寸类别表中获得的尺寸,而$product_name是产品的名称,目前正在为我工​​作。

现在我想要的是,如果产品中有特定尺寸,但尺寸类别表中不存在,那么该产品应该分配到最接近的尺寸类别。

例如

  

Optimum Nutrition 100乳清蛋白 - 金标准巧克力薄菏2.07磅'

我的尺寸类别表中不存在2.07磅,那么此产品应分配为2磅或2.47磅类别。

2 个答案:

答案 0 :(得分:0)

如果您的数据库包含2.00和2.10,那么对于
Optimum Nutrition 100乳清蛋白 - 金标准巧克力薄菏2.07磅

第1步:正则表达式:查找2.07

您需要一个与{ "key": [ "2035864" ], "value": { "revenue": 302805.35 } } 匹配的正则表达式

2.07 lbs

我让你以通用而强大的方式匹配2.07。您可以在http://regex101.comhttp://www.phpliveregex.com/

测试正则表达式

第2步:SQL:

  • 查找低于2.07的第一个值和
  • 在数据库中查找高于2.07的第一个值 例如。 2.00和2.10。

第3步:PHP:确定哪个值最接近。

E.g。 2.10

答案 1 :(得分:-1)

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