【问题标题】:PHP Strip Zeros From String of NumbersPHP从数字字符串中去除零
【发布时间】:2020-01-06 19:50:52
【问题描述】:

目前,我有一个 SKU,它是一个字符串,即 LS181004。我想将该字符串转换为 18104。但是,我遇到了包含 1010 的字符串的问题,因为它减少到 11,我需要 10 留在字符串中。问题是字符串,如 LS121010、LS101010 等。

例如, 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;
}

【问题讨论】:

  • 请明确说明应根据什么基础/规则将给定字符串转换为您想要的结果字符串。目前还不够清楚。
  • 对于 LS181104 的情况,它应该变成 LS18114 还是保持原样?您需要公开有关规则的更多详细信息
  • LS181104 应返回为 18114。LS101010 应返回为 101010。LS120810 应返回为 LS12810。

标签: php string laravel formatting format


【解决方案1】:

如果我理解得很好,您需要做的是将数字分成4部分,即

“LS”和三个 2 位数字。

要获取数字,您只需使用 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

希望有帮助!

【讨论】:

  • 谢谢,这是一个很好的开始。有几个边缘情况不起作用。例如,LS040404X 需要在末尾加上 X。我想我在您的帮助下找到了解决方案。
【解决方案2】:

这就是我最终做的事情

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多