【问题标题】:Add space after every 4th character每 4 个字符后添加空格
【发布时间】:2012-08-04 10:21:08
【问题描述】:

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

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

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

如何让它在每 4 次之后显示?

【问题讨论】:

    标签: php


    【解决方案1】:

    你可以使用chunk_split [docs]:

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

    DEMO

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

    【讨论】:

    • 严格来说,如果OP在第四位,则需要traling空间。但是有人不喜欢,我也投了反对票:stackoverflow.com/a/11807841/367456
    • 更准确地说是rtrim($str, ' ')。但它仍然缺少删除任何个尾随空格的问题。
    • 是的。好吧,OP 会知道他们想要什么 :)
    • 当然,在澄清之前我不会在那个级别上挑剔:)。但是,我希望反对者能够分享。看起来他/她收回了你的,我闻到有人不喜欢不使用自动换行,但这只是一个疯狂的猜测^^
    【解决方案2】:

    Wordwrap 完全符合您的要求:

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

    将输出: 1234 5678

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

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

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

    Reference - wordwrap

    【讨论】:

    • 这是比chunk_split 更好的答案,因为string 在每个 n 字符上添加了这个string 在给定字符串的末尾
    【解决方案3】:

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

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

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

    【讨论】:

    • 不会在每四个字符后插入一个空格。
    • 看起来这完全不同,codepad.org/4uDNeEWl,五个必需的空格,其中只有一个(看起来,只是因为它已经在原始字符串中)。
    【解决方案4】:

    这是一个长度不是 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);
    

    结果:1​​4 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,' ')));}
    

    希望对你们中的一些人有所帮助。

    【讨论】:

      【解决方案5】:

      方法是将分成 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);
      

      【讨论】:

      • 缩小版:chunk_split($str, $chunkLength, ' ');
      【解决方案6】:

      单行:

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

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

      就是这样:D

      【讨论】:

      • 当然,还有that has already been answered,包括。可见,如果在每个第 4 个字符之后以及字符串末尾都需要一个空格,则需要添加一些空格。选项卡不是空格,但我想你知道。
      • 为了可见性,我使用了标签。现在应该足够了:D
      • 正如所写,我以为你知道 :)
      【解决方案7】:

      wordwrap() 的功能基本上是一样的,不过应该也可以。

      $newstr = '';
      $len = strlen($str); 
      for($i = 0; $i < $len; $i++) {
          $newstr.= $str[$i];
          if (($i+1) % 4 == 0) {
              $newstr.= ' ';
          }
      }
      

      【讨论】:

      • afaik 你应该保存 strlen 的值,而不是在 for 循环中使用它,因为在循环中使用它会导致每次迭代都会评估字符串的长度
      • 如果这是一个非常长的字符串,你是对的。但是,短字符串不需要更多时间。无论如何,我根据您的想法更新了答案。
      【解决方案8】:

      PHP3 兼容:

      试试这个:

      $strLen = strlen( $str );
      for($i = 0; $i < $strLen; $i += 4){
        echo substr($str, $i, 4) . ' ';
      } 
      unset( $strLen );
      

      【讨论】:

      • 这里唯一的缺点是会有一个尾随空格需要删除或以其他方式处理。
      • 是的.. 可以用 trim() 我猜 ;)
      • 是的,我的意思是这取决于他想要什么。我认为我的演示足以说明解决方案,不是吗?
      • 严格按照问题的措辞,OP要求尾部斜杠。但是,如果我认为正确,您还需要输出答案中缺少的剩余子字符串。
      • 这在任何情况下基本上都是学术性的,因为他只会使用自动换行,但是你指的“剩余子字符串”是什么?
      【解决方案9】:
      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
      

      【讨论】:

      • 这看起来不像php
      • 提供的代码可能会有所帮助,但为了使其成为一个好的答案,您还应该描述/解释您的代码为什么/如何准确地解决问题。
      • 虽然此代码可能有助于解决问题,但提供有关 why 和/或 如何 回答问题的附加上下文将显着改善长期价值。请edit你的答案添加一些解释。
      猜你喜欢
      • 1970-01-01
      • 2014-04-17
      • 2015-07-28
      • 1970-01-01
      • 1970-01-01
      • 2013-07-15
      • 2013-12-13
      • 2020-08-23
      • 1970-01-01
      相关资源
      最近更新 更多