Я хочу добавить пробел в некоторый вывод после каждого 4-го символа до конца строки. Я пытался:
$str = $rows['value']; <? echo substr($str, 0, 4) . ' ' . substr($str, 4); ?>
Который только дал мне пространство после первых 4 символов.
Как я могу показать это после каждых 4-го?
Вы можете использовать chunk_split
[docs] :
$str = chunk_split($rows['value'], 4, ' ');
DEMO
Если длина строки кратна четырем, но вы не хотите занимать конечное пространство, вы можете передать результат для trim
.
Wordwrap делает именно то, что вы хотите:
echo wordwrap('12345678' , 4 , ' ' , true )
выйдет: 1234 5678
Если вы хотите, скажем, дефис после каждой второй цифры вместо этого, поменяйте «4» на «2» и пробел для дефиса:
echo wordwrap('1234567890' , 2 , '-' , true )
будет выводиться: 12-34-56-78-90
Ссылка – wordwrap
Вы уже видели эту функцию под названием wordwrap? http://us2.php.net/manual/en/function.wordwrap.php
Вот решение. Работает прямо из коробки, как это.
<?php $text = "Thiswordissoverylong."; $newtext = wordwrap($text, 4, "\n", true); echo "$newtext\n"; ?>
По пути было бы разбиться на 4-символьные куски, а затем снова объединить их вместе с пробелом между каждой частью.
Поскольку это технически пропустит, чтобы вставить один в самом конце, если последний кусок будет иметь ровно 4 символа, нам нужно добавить его вручную ( Demo ):
$chunk_length = 4; $chunks = str_split($str, $chunk_length); $last = end($chunks); if (strlen($last) === $chunk_length) { $chunks[] = ''; } $str_with_spaces = implode(' ', $chunks);
один лайнер:
$yourstring = "1234567890"; echo implode(" ", str_split($yourstring, 4))." ";
Это должно дать вам результат:
1234 5678 90
Вот и все: D
Функция wordwrap()
основном делает то же самое, однако это должно работать.
$newstr = ''; $len = strlen($str); for($i = 0; $i < $len; $i++) { $newstr.= $str[$i]; if (($i+1) % 4 == 0) { $newstr.= ' '; } }
PHP3 Совместимость:
Попробуй это:
$strLen = strlen( $str ); for($i = 0; $i < $strLen; $i += 4){ echo substr($str, $i, 4) . ' '; } unset( $strLen );
StringBuilder str = new StringBuilder("ABCDEFGHIJKLMNOP"); int idx = str.length() - 4; while (idx > 0){ str.insert(idx, " "); idx = idx - 4; } return str.toString();
Объяснение, этот код добавит пространство справа налево:
str = "ABCDEFGH" int idx = total length - 4; //8-4=4 while (4>0){ str.insert(idx, " "); //this will insert space at 4th position idx = idx - 4; // then decrement 4-4=0 and run loop again }
Конечным результатом будет:
ABCD EFGH