#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. Добавлена альтернатива, может быть проще.