PHP вставка пробела после каждых N символов

Author Автор: Роман Чернышов    Опубликовано: 25 мая 2011

Не очень часто возникает надобность, во вставке пробела в строке, после заданного N количества символов, причем пробел необходимо вставить через каждые N символов. Но все же такая задача встречается и порой играет важную роль в проекте.

В поисках решения я воспользовался поиском и все, что нашел, к сожалению не соответствовало моим требованиям.

Более того многие примеры кода, неправильно обрабатывали кириллицу в кодировке UTF-8 (иногда вставка пробела приходилась между двумя байтами одного символа, в результате символ отображался как вопрос). В итоге пришлось немного допилить найденный мною пример:

function add_pr ($str,$count)
{
$str=iconv('UTF-8','WINDOWS-1251',$str);
$i = 0;$no_pr = 0;$j = 1;
while ($i < strlen($str))
{
$text[$j] = $text[$j].$str[$i];
if ($str[$i] == ' '){$no_pr = 0;$j = $j+1;}
if ($str[$i] != ' '){$no_pr = $no_pr+1;}
if ($no_pr == $count){$text[$j] = $text[$j].' ';$no_pr = 0;}
$i = $i+1;
}
while ($j != 0){$st = $st.$text[$j];$j = $j-1;}
$st=iconv('WINDOWS-1251','UTF-8',$st);
return $st;
}

Обратите внимания данная функция работает с текстом в кодировке WINDOWS-1251, поэтому мы предварительно конвертируем строку из UTF-8. Иначе вместо строки с расставленными пробелами можно получить сплошные каракули (или вопросы).

Надеюсь эта функция кому нибудь пригодится. Просто мысли вслух)

4 комментария to “PHP вставка пробела после каждых N символов”

  • костя 26.03.2013 в 3:10 пп

    у меня не работает, пробовал закоментить все строки
    как я понял вылетает на циклах
    страница просто перестает отображаться, решил даже так сделать:
    function add_pr($str,$count)
    {
    if (!empty($str))
    {
    $str=iconv(‘UTF-8′,’WINDOWS-1251’,$str);
    $i = 0;$no_pr = 0;$j = 1;
    $len = strlen($str);
    while ($i < $len)
    {
    $text[$j] = $text[$j].$str[$i];
    if ($str[$i] == ‘ ‘){$no_pr = 0;$j = $j+1;}
    if ($str[$i] != ‘ ‘){$no_pr = $no_pr+1;}
    if ($no_pr == $count){$text[$j] = $text[$j].’ ‘;$no_pr = 0;}
    $i = $i+1;
    }
    while ($j != 0)
    {
    $st = $st.$text[$j];$j = $j-1;
    }
    $st=iconv(‘WINDOWS-1251′,’UTF-8’,$st);
    return $st;
    }
    }

  • костя 26.03.2013 в 3:29 пп

    function add_pr ($str,$count)
    {
    $i = 0;
    $no_pr = 0;
    $j = 1;
    while ($i < strlen($str))
    {
    $text[$j] = $text[$j].$str[$i];
    if ($str[$i] == ' ')
    {
    $no_pr = 0;
    $j = $j+1;
    }
    if ($str[$i] != ' ')
    {
    $no_pr = $no_pr+1;
    }
    if ($no_pr == $count)
    {
    $text[$j] = $text[$j].' ';
    $no_pr = 0;
    }
    $i = $i+1;
    }
    while ($j != 0)
    {
    print $j."";
    $st = $st.$text[$j];
    $j = $j-1;
    }
    return $st;
    }

  • Виктор 02.09.2013 в 2:46 пп

    Есть решение куда проще, красивее и лучше:

    function stan($value, $offset = 3) {
    $v = (string)$value;
    $l = length($v);
    $ret = array();
    for($i=$l; $i>=0; $i—) {
    if(($i % $offset) == 0) $ret[] = » «;
    $ret[] = $v[$l-$i];
    }
    return trim(implode(null, $ret));
    }
    // $offset — через сколько символов ставить пробел!
    // Внимание, данный способ отсчитывает от конца строки, например для преобразование стоимости из 1560980 в 1 560 980 или из 5690 в 5 690
    // удачи.

    • Владимир 15.11.2022 в 2:27 дп

      function stan($value, $offset = 3) {

      $v = (string)$value;
      $l = strlen($v);
      $ret = array();
      $k=1;

      for($i=$l-1; $i>=0; $i—) {
      $k++;

      if(($k % $offset) == 0) {
      $ret[] = ‘ ‘;
      }

      $ret[] = $v[$l-1-$i];
      }
      return trim(implode(null, $ret));
      }

      echo stan(1321131113); //1 321 131 113

Оставить комментарий на костя

Автор блога
Роман Чернышов
Веб-разработчик,
Full Stack
Senior, Architect
PHP, JavaScript, Node.JS, Python, HTML 5, CSS 3, MySQL, Bash, Linux Admin
Заказать работу
предложить оффер

Моя книга
Книга. Веб-разработчик. Легкий вход в профессию
Печатная книга
Веб-разработчик.
Легкий вход в профессию
Оформить предзаказ
Последние вопросы
Список вопросов
Последние комментарии
Меню

Archive

Мои проекты
Insurance CMS Love Crm CMS Совместные покупки Мой PHP Framework Хостинг для моих клиентов Лицензии на мой софт и поддержка