Логика для шаблона строки с длинным числом, добавление пробелов в php

#php #logic

#php #Логические

Вопрос:

У меня есть номер строки:

 $number = "101011004113511113";
  

И мне нужно преобразовать это в формат, подобный:

 $pattern = "10 101 1004 1135 11113";
  

Я добился успеха с помощью этого кода:

 <?php

    $number = "101011004113511113";

    $pattern = "10 101 1004 1135 11113";

    $newNumber = "";

    for ($i = 0; $i < strlen($number); $i  )
    {
        if ($i == 2)
        {
            $newNumber .= " ";
        }

        if ($i == 5)
        {
            $newNumber .= " ";
        }

        if ($i == 9)
        {
            $newNumber .= " ";
        }

        if ($i == 13)
        {
            $newNumber .= " ";
        }

        $newNumber .= $number[$i];
    }

    echo $newNumber;
  

Я хотел бы знать, есть ли лучшее программное решение для этой проблемы. Поскольку я в настоящее время изучаю программирование, я хотел бы услышать мнение опытного программиста, даже необходимо ли какое-то лучшее программное решение.

Комментарии:

1. какое здесь правило?

2. Являются ли пробелы фиксированными индексами? Или есть другое правило?

3. Я имею в виду, что нет специального правила, у меня есть этот номер, и правилом является рекламное пространство, как в $ pattern.

4. Вот почему я думаю, что лучшего решения этой проблемы не существует.

5. Если вы уже знаете, как должен выглядеть конечный результат, зачем вообще беспокоиться об этом? $newNumber = $pattern; нет?

Ответ №1:

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

 preg_match('/(d{2})(d{3})(d{4})(d{5})/',$number, $result);
$result = implode(' ', array_slice($result, 1));
  

Это только второй вопрос, который я могу использовать vsprintf :

 $result = vsprintf("%d%d %d%d%d %d%d%d%d %d%d%d%d%d", str_split($number));
  

Комментарии:

1. возможно, шаблон не является устойчивым. я думаю, это не универсально

2. Я думаю, это здорово, шаблон тот же, если они изменятся, я легко смогу принять это регулярное выражение. Хорошая работа.

3. Добавлена альтернатива, может быть проще.