Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 找到最接近的值_Php_Mysql - Fatal编程技术网

Php 找到最接近的值

Php 找到最接近的值,php,mysql,Php,Mysql,我在我的项目中面临一个问题。我有一个产品名称列表,如 “最佳营养100乳清蛋白-金标准巧克力薄荷糖2.07磅” “最佳营养100乳清蛋白-金标准天然香草1.9磅” “最佳营养100乳清蛋白-金标准巧克力薄荷糖2.07磅” “最佳营养100乳清蛋白-金标准巧克力花生酱3.31磅” “最佳营养100乳清蛋白-金标准酸橙派1.81磅” “最佳营养100乳清蛋白-金标准盐焦糖1.81磅” “最佳营养100乳清蛋白-金标准香草冰淇淋2.07磅” 所有这些产品都保存在产品表中 然后,我有另一个存储大小类别的

我在我的项目中面临一个问题。我有一个产品名称列表,如

“最佳营养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磅类别

$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;
我正在为此使用以下正则表达式:

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是产品的名称,它目前对我来说运行良好

现在我想知道,如果某个特定尺寸在产品中可用,但在尺寸类别表中不存在,那么该产品应该分配给最接近的尺寸类别

比如说

最佳营养100乳清蛋白-金标准巧克力薄荷糖2.07磅'

2.07磅不存在于我的尺码类别表中,则该产品应分配至2磅或2.47磅类别

$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.00和2.10,则为 最佳营养100乳清蛋白-金标准巧克力薄荷糖2.07磅

步骤1:Regex:Find 2.07 你需要一个匹配2.07磅的正则表达式

我让您以一种通用且健壮的方式匹配2.07。您可以在或处测试正则表达式

步骤2:SQL: 找到低于2.07的第一个值,然后 在数据库中查找高于2.07的第一个值。 例如2.00和2.10。 第3步:PHP:确定最接近的值。
例如,2.10

让我们先看看提取质量的正则表达式,然后我们可以在此基础上进行构建that@rohitkaushal知道如何构建正则表达式吗?你了解PCRE了吗?告诉我们你试图通过SQL查询从你的数据库中获取越来越大的数据。2磅巧克力薄荷糖!那么,您必须从feed regx中找到当前大小,然后使用范围>=这个解决方案不会给我任何结果$搜索产品='2.07磅';应该是产品的名称,而不是尺寸本身。就像$search_product='最佳营养100乳清蛋白-金标准天然香草1.9磅',主要的是你没有合适的数据库格式。请将您的产品分类为产品名称、类别、描述和尺寸。我们如何实现第一步,就好像产品名称是最佳营养100乳清蛋白-金标准巧克力薄荷糖2.07磅。我们如何找到2.07磅的尺寸?如果我的尺码表中已经存在尺码,我通常会通过正则表达式找到它。我认为这不是一个正确的方法。尺寸是可变的,例如磅、份量、药片、瓶子等,每次尺寸值在特定产品中都可能不同,比如有时为2.07磅,有时为2.07磅,无间隔。有时是1.5,2.04,3.33。对此,动态方法应该是什么?具有挑战性。我不是舒尔,这是可以解决的。更进一步,需要更多关于单独表和产品名称的可能值的示例。请将它们添加到您的问题中。例如,我有一个数组,大小如下$arr_size=array1磅、3.3磅、8磅、2.3磅、3磅、10磅、5磅;产品名称如:array“最佳营养100乳清蛋白香草1.9磅”,“最佳营养100乳清蛋白-金标准2.07磅”,“最佳营养100乳清蛋白-金标准巧克力花生酱3.31磅”,“最佳营养100乳清蛋白-金标准酸橙馅饼1.81磅”,“最佳营养100乳清蛋白-金标准盐焦糖1.81磅”,“最佳营养100乳清蛋白-金标准香草冰淇淋2.07磅”@rohitkaushal阵列来自哪里。在这个问题中,它被称为表。那是一个数据库表吗?