70

我想在每个第 4 个字符之后在某些输出中添加一个空格,直到字符串结尾。我试过了:

$str = $rows['value'];
<? echo substr($str, 0, 4) . ' ' . substr($str, 4); ?>

这让我在前 4 个字符之后有了空格。

我怎样才能让它在每 4 次之后显示?

4

9 回答 9

103

您可以使用chunk_split [文档]

$str = chunk_split($rows['value'], 4, ' ');

演示

如果字符串的长度是四的倍数,但您不想要尾随空格,则可以将结果传递给trim.

于 2012-08-04T10:25:42.830 回答
62

Wordwrap 完全符合您的要求:

echo wordwrap('12345678' , 4 , ' ' , true )

将输出:1234 5678

如果你想在每第二个数字后面加一个连字符,把“4”换成“2”,把空格换成连字符:

echo wordwrap('1234567890' , 2 , '-' , true )

将输出:12-34-56-78-90

参考 - 自动换行

于 2014-07-01T18:17:39.937 回答
10

你见过这个叫做 wordwrap 的函数吗? http://us2.php.net/manual/en/function.wordwrap.php

这是一个解决方案。像这样开箱即用。

<?php
$text = "Thiswordissoverylong.";
$newtext = wordwrap($text, 4, "\n", true);
echo "$newtext\n";
?>
于 2012-08-04T10:23:59.420 回答
8

这是长度不是 4 的倍数(在我的情况下为 5)的字符串示例。

function space($str, $step, $reverse = false) {
    
    if ($reverse)
        return strrev(chunk_split(strrev($str), $step, ' '));
    
    return chunk_split($str, $step, ' ');
}

利用 :

echo space("0000000152748541695882", 5);

结果:00000 00152 74854 16958 82

反向模式使用(“BVR 代码”用于瑞士计费):

echo space("1400360152748541695882", 5, true);

结果:14 00360 15274 85416 95882

编辑 2021-02-09

对于 EAN13 条形码格式也很有用:

space("7640187670868", 6, true);

结果:7 640187 670868

简短的语法版本:

function space($s=false,$t=0,$r=false){return(!$s)?false:(($r)?trim(strrev(chunk_split(strrev($s),$t,' '))):trim(chunk_split($s,$t,' ')));}

希望它可以帮助你们中的一些人。

于 2018-05-15T05:26:02.990 回答
4

单线:

$yourstring = "1234567890";
echo implode(" ", str_split($yourstring, 4))." ";

这应该给你作为输出:
1234 5678 90

就是这样:D

于 2012-08-04T10:39:23.770 回答
4

途中将拆分为 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);
于 2012-08-04T10:26:14.383 回答
1

该功能wordwrap()基本上是相同的,但是这也应该起作用。

$newstr = '';
$len = strlen($str); 
for($i = 0; $i < $len; $i++) {
    $newstr.= $str[$i];
    if (($i+1) % 4 == 0) {
        $newstr.= ' ';
    }
}
于 2012-08-04T10:28:05.953 回答
0

PHP3 兼容:

尝试这个:

$strLen = strlen( $str );
for($i = 0; $i < $strLen; $i += 4){
  echo substr($str, $i, 4) . ' ';
} 
unset( $strLen );
于 2012-08-04T10:25:45.913 回答
-3
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
于 2015-06-15T19:15:14.043 回答