Preg_split создает массив, но делает его пустым - PullRequest
0 голосов
/ 26 марта 2020

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

function insertDocs($str) {
    $str = str_split($str);
    $str = array_reverse($str);
    $str = implode($str);
    $str1 = preg_split("/[0-9]{1,3}/u", $str);
    print_r($str1);
    $str1 = implode('.', $str1);
    $str1 = str_split($str1);
    $str1 = array_reverse($str1);
    $str1 = implode($str1);
    return $str;
  }
  echo insertDocs("12345678");

Вот что я получу взамен:

Array
(
    [0] =>
    [1] =>
    [2] =>
    [3] =>
)

Это print_r и echo:

87654321

Скажите, что я делаю неправильно, или скажите, как сделай проще, я буду тебе очень благодарен

1 Ответ

0 голосов
/ 26 марта 2020

Поскольку ваша первая часть зависит от общего количества символов, этот код сначала разделяет нечетный бит с начала, а затем использует str_split() с остатком, чтобы разделить его на 3 символьных сегмента ...

function insertDocs($str) {
    $start = substr($str, 0, strlen($str) % 3);
    $end = str_split(substr($str, strlen($start)), 3);
    array_unshift($end, $start);
    return implode(".", $end);
}

То есть

echo insertDocs("12345678");

дает ...

12.345.678

Чтобы исправить исходный код, вы можете изменить строку preg_split() на

$str1 = str_split($str, 3);

и убедитесь, что вы возвращаете $str1 из функции, а не $str.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...