Ответ 1
Вы можете использовать chunk_split
[docs]:
$str = chunk_split($rows['value'], 4, ' ');
Если длина строки кратна четырем, но вы не хотите использовать конечное пространство, вы можете передать результат trim
.
Я хочу добавить пробел в некоторый вывод после каждого 4-го символа до конца строки. Я пробовал:
$str = $rows['value'];
<? echo substr($str, 0, 4) . ' ' . substr($str, 4); ?>
Который только дал мне пространство после первых 4 символов.
Как я могу показать его после каждого четвертого?
Вы можете использовать chunk_split
[docs]:
$str = chunk_split($rows['value'], 4, ' ');
Если длина строки кратна четырем, но вы не хотите использовать конечное пространство, вы можете передать результат trim
.
Wordwrap делает именно то, что вы хотите:
echo wordwrap('12345678' , 4 , ' ' , true )
будет выводиться: 1234 5678
Если вы хотите, скажем, дефис после каждой второй цифры, замените "4" на "2" и пробел для дефиса:
echo wordwrap('1234567890' , 2 , '-' , true )
будет выводиться: 12-34-56-78-90
Вы уже видели эту функцию под названием 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
PHP3 Compatible:
Попробуйте следующее:
$strLen = strlen( $str );
for($i = 0; $i < $strLen; $i += 4){
echo substr($str, $i, 4) . ' ';
}
unset( $strLen );
Функция wordwrap()
в основном делает то же самое, однако это также должно работать.
$newstr = '';
$len = strlen($str);
for($i = 0; $i < $len; $i++) {
$newstr.= $str[$i];
if (($i+1) % 4 == 0) {
$newstr.= ' ';
}
}
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