php - 从具有混合格式的列中提取包大小

标签 php mysql

我在名为 product_master_test 的表中有一列 pack_size。我面临的问题是 pack_size 是混合格式,没有统一性。

例如:

  • 4 x 2kg(包装尺寸应为 4)
  • 48-43GM(包装尺寸应为 48 件)
  • 12 x 1BTL(包装尺寸应为 12)
  • 1 x 24EA(包装尺寸应为 24 件)

我一直在考虑不同的方法,但我想不出任何在查询/PHP 代码中没有大量 IF 语句的情况下可行的方法。有没有我缺少的解决方案?

如果有更简单的方法使用 PHP 处理它,我确实在 Excel 中有该文件。

我不包括任何代码,因为我不完全确定从哪里开始解决这个问题。

最佳答案

使用正则表达式来拆分包大小至少可以为您提供各种组件,然后您可以(可能)从中推断出更多...

$packs = ["4 x 2kg","48-43GM","12 x 1BTL","1 x 24EA", "12 X 1 EA"];

foreach ( $packs as $size ) {
if ( preg_match("/(\d*)(?:\s+)?[xX-](?:\s+)?(\d+)(?:\s+)?(\w*)/", $size, $match) == 1 )  {
        print_r($match);
    }
    else {
        echo "cannot determine - ".$size.PHP_EOL;
    }
}

(正则表达式可能可以优化,不是我的专业领域)。它基本上将其拆分为一个数字,一些带有 x- 的空格,然后是另一个数字,后跟单位(一些文本)。上面的测试用例给出了...

Array
(
    [0] => 4 x 2kg
    [1] => 4
    [2] => 2
    [3] => kg
)
Array
(
    [0] => 48-43GM
    [1] => 48
    [2] => 43
    [3] => GM
)
Array
(
    [0] => 12 x 1BTL
    [1] => 12
    [2] => 1
    [3] => BTL
)
Array
(
    [0] => 1 x 24EA
    [1] => 1
    [2] => 24
    [3] => EA
)
Array
(
    [0] => 12 X 1 EA
    [1] => 12
    [2] => 1
    [3] => EA
)

对于 else 部分,它还应该为您提供它无法确定的部分,并可能允许您相应地进行更改。

关于php - 从具有混合格式的列中提取包大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58916564/

相关文章:

php - mysql导出csv时出错

php - 从运行 PHP 的应用服务调用 Azure 表存储时出现 cURL 错误 60

mysql - 使用jquery ajax将输入文本框绑定(bind)到mysql数据

php - 带sql的多维数组

mysql - 按日期类型问题排序

php - Google API 国家/地区检测 PHP

php - PHP 中 printf() 函数的用途是什么?

javascript - 带有单选按钮过滤的 PHP + MYSQL 即时搜索

php - 数据库编码问题?显示带问号的双引号和单引号

php - 是什么问题导致无法在使用 php 的 MySQL 查询上使用 LIMIT 函数?