Search code examples
phparraysreplacesku

Trying to fix SKU numbers from 55A_3 to A55_3 with PHP in SQL


I have SKU numbers imported from a CSV file into SQL DB. Pattern look like:

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

I am trying to move all the letters in front of the numbers. like:

A55_3  
W345_1+B04_1  
T128_2+T167_2+T113_8+T115_8  

My best idea how to do it was to search for 345W and so, and to replace it with W345 and so:

$sku = "345W_1+04B_1";

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

then generating the find and replace arrays

$B_find = 
$B_replace =

maybe just using str_replace??

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

Result should be for all SKU numbers
W345_1+B04_1
Any ideas?


Solution

  • Here I defined a method with specific format with unlimited length.

    $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);
    }