Попытка исправить номера SKU от 55A_3 до A55_3 с PHP в SQL - PullRequest
0 голосов
/ 23 октября 2019

У меня есть номера SKU, импортированные из файла CSV в базу данных SQL. Шаблон выглядит так:

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  

Моя лучшая идея, как это сделать, - это найти 345 Вт и так, и заменить его на 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
Есть идеи?

Ответы [ 2 ]

1 голос
/ 23 октября 2019

Вы можете использовать preg_replace для выполнения этой работы, ища несколько цифр, затем буквы и одну из _ с цифрами, + или конец строки, а затемпоменять местами порядок цифр и букв:

$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

0 голосов
/ 23 октября 2019

Здесь я определил метод с конкретным форматом неограниченной длины.

$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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...