PHP Полосы нулей из цепочки чисел - PullRequest
0 голосов
/ 06 января 2020

В настоящее время у меня есть SKU, который является строкой LS181004. Я хочу преобразовать эту строку в 18104. Однако у меня возникают проблемы со строками, в которых 1010, поскольку она уменьшается до 11, и мне нужно 10, чтобы остаться в строке. Проблемы представляют собой строки типа LS121010, LS101010 и т. Д. c.

Например, LS101010 должен быть возвращен как LS101010. LS101002 должен быть возвращен как LS10102. LS121010 должен быть возвращен как LS121010. LS120804 должен быть возвращен как LS1284.

Код:

public function format()
{


    $count =0;
    $sku = str_replace("LS", "", $this->SKU, $count);
    if ($count > 0) {
        $sku = str_replace("01", "1", $sku);
        $sku = str_replace("02", "2", $sku);
        $sku = str_replace("03", "3", $sku);
        $sku = str_replace("04", "4", $sku);
        $sku = str_replace("05", "5", $sku);
        $sku = str_replace("06", "6", $sku);
        $sku = str_replace("07", "7", $sku);
        $sku = str_replace("08", "8", $sku);
        $sku = str_replace("09", "9", $sku);

        $this->SKU = $sku;
        $this->save();
    }


    return $this;
}

Ответы [ 2 ]

1 голос
/ 07 января 2020

Если я хорошо понимаю, что вам нужно сделать, это разделить число на 4 части, то есть

"LS" и три 2-ди git числа.

Чтобы получить числа, которые вы используете substr php функция

$num1 = substr($this->SKU, 2, 2); // get char 3 and 4
$num1 = substr($this->SKU, 4, 2); // 5 and 6
$num1 = substr($this->SKU, 6, 2); // 7 and 8

https://www.php.net/manual/en/function.substr.php

тогда, если каждое из трех чисел меньше 10 вы удаляете ноль впереди

$num1 = (int)$num1; // casting to integer will do, no conditional needed
$num2 = (int)$num2;
$num3 = (int)$num3;

$sku = 'LS' . $num1 . $num2 . $num3; // concatenate back, and that's it

надеюсь, что это поможет!

0 голосов
/ 07 января 2020

Это то, что я закончил

$sku = str_replace("LS", "", $this->SKU, $count);
        if ($count > 0) {
            $ls = strpos($this->SKU, 'LS');

            $num1 = substr($this->SKU, $ls+2, 2);
            $num2 = substr($this->SKU, $ls+4, 2);
            $num3 = substr($this->SKU, $ls+6, 2);

            if ((int) $num1 < 10) {
                $num1 = str_replace("01", "1", $num1);
                $num1 = str_replace("02", "2", $num1);
                $num1 = str_replace("03", "3", $num1);
                $num1 = str_replace("04", "4", $num1);
                $num1 = str_replace("05", "5", $num1);
                $num1 = str_replace("06", "6", $num1);
                $num1 = str_replace("07", "7", $num1);
                $num1 = str_replace("08", "8", $num1);
                $num1 = str_replace("09", "9", $num1);

                //replace original num1 with new single digit num1 in $sku
                $sku = str_replace(substr($this->SKU, $ls+2, 2), $num1, $sku);
            }

            if ((int) $num2 < 10 && ($num1 != $num2)) {
                $num2 = str_replace("01", "1", $num2);
                $num2 = str_replace("02", "2", $num2);
                $num2 = str_replace("03", "3", $num2);
                $num2 = str_replace("04", "4", $num2);
                $num2 = str_replace("05", "5", $num2);
                $num2 = str_replace("06", "6", $num2);
                $num2 = str_replace("07", "7", $num2);
                $num2 = str_replace("08", "8", $num2);
                $num2 = str_replace("09", "9", $num2);

                $sku = str_replace(substr($this->SKU, $ls+4, 2), $num2, $sku);
            }

            if ((int) $num3 < 10 && ($num2 != $num3) && ($num1 != $num3)) {
                $num3 = str_replace("01", "1", $num3);
                $num3 = str_replace("02", "2", $num3);
                $num3 = str_replace("03", "3", $num3);
                $num3 = str_replace("04", "4", $num3);
                $num3 = str_replace("05", "5", $num3);
                $num3 = str_replace("06", "6", $num3);
                $num3 = str_replace("07", "7", $num3);
                $num3 = str_replace("08", "8", $num3);
                $num3 = str_replace("09", "9", $num3);

                $sku = str_replace(substr($this->SKU, $ls+6, 2), $num3, $sku);
            }

            $this->SKU = $sku;
            $this->save();
...