每第4个字符后添加空格

use*_*767 47 php

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

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

这只是让我获得前4个字符后的空格.

我怎样才能让它在每隔4号后显示出来?

Fel*_*ing 80

你可以使用chunk_split [docs]:

$str = chunk_split($rows['value'], 4, ' ');
Run Code Online (Sandbox Code Playgroud)

DEMO

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

  • 让`rtrim($ str,'')`更准确.但它仍然没有删除*任何*尾随空格的问题. (2认同)

Ole*_*mak 42

Wordwrap完全符合您的要求:

echo wordwrap('12345678' , 4 , ' ' , true )
Run Code Online (Sandbox Code Playgroud)

将输出:1234 5678

相反,如果你想要每隔一个数字后面的连字符,则将"4"换成"2",并将连字符的空格换成:

echo wordwrap('1234567890' , 2 , '-' , true )
Run Code Online (Sandbox Code Playgroud)

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

参考 - wordwrap


小智 9

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

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

<?php
$text = "Thiswordissoverylong.";
$newtext = wordwrap($text, 4, "\n", true);
echo "$newtext\n";
?>
Run Code Online (Sandbox Code Playgroud)

  • 这不会在每四个字符后插入一个空格. (3认同)

Mel*_*man 7

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

function space($str, $step, $reverse = false) {
    
    if ($reverse)
        return strrev(chunk_split(strrev($str), $step, ' '));
    
    return chunk_split($str, $step, ' ');
}
Run Code Online (Sandbox Code Playgroud)

用 :

echo space("0000000152748541695882", 5);
Run Code Online (Sandbox Code Playgroud)

结果:00000 00152 74854 16958 82

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

echo space("1400360152748541695882", 5, true);
Run Code Online (Sandbox Code Playgroud)

结果:14 00360 15274 85416 95882

编辑 2021-02-09

也适用于 EAN13 条码格式:

space("7640187670868", 6, true);
Run Code Online (Sandbox Code Playgroud)

结果: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,' ')));}
Run Code Online (Sandbox Code Playgroud)

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