我在名为 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/