0

我将 SKU 编号从 CSV 文件导入 SQL DB。图案看起来像:

55A_3  
345W_1+04B_1  
128T_2+167T_2+113T_8+115T_8  

我正在尝试移动数字前面的所有字母。喜欢:

A55_3  
W345_1+B04_1  
T128_2+T167_2+T113_8+T115_8  

我最好的办法是搜索 345W 等,然后用 W345 等替换它:

$sku = "345W_1+04B_1";

$B_range_num = range(0,400);
$B_range_let = range("A","Z");

然后生成查找和替换数组

$B_find = 
$B_replace =

也许只是使用 str_replace?

$res = str_replace($B_find,$B_replace,$sku);

结果应该适用于所有 SKU 编号
W345_1+B04_1 有
什么想法吗?

4

2 回答 2

1

您可以使用preg_replace来完成这项工作,查找一些数字,然后是一个字母和一个_带数字的 an,a+或字符串结尾,然后交换数字和字母的顺序:

$skus = array('55A_3', 
              '345W_1+04B_1',
              '128T_2+167T_2+113T_8+115T_8',
              '55A');
foreach ($skus as &$sku) {
    $sku = preg_replace('/(\d+)([A-Z]+)(?=_\d+|\+|$)/', '$2$1', $sku);
}
print_r($skus);

输出:

Array
(
    [0] => A55_3
    [1] => W345_1+B04_1
    [2] => T128_2+T167_2+T113_8+T115_8
    [3] => A55
)

3v4l.org 上的演示

于 2019-10-23T01:04:24.547 回答
0

在这里,我定义了一个具有无限长度的特定格式的方法。

$str = '128T_2+167T_2+113T_8+115T_8';

echo convertProductSku($str);

function convertProductSku($str) {
  $arr = [];
  $parts = explode('+', $str);

  foreach ($parts as $part) {
    list($first, $second) = array_pad(explode('_', $part), 2, null);
    $letter = substr($first, -1);
    $number = substr($first, 0, -1);

    $arr[] = $letter . $number . ($second ? '_' . $second : '');
  }

  return implode('+', $arr);
}
于 2019-10-23T00:59:40.070 回答