【问题标题】:Stripping last character from a foreach loop [duplicate]从foreach循环中剥离最后一个字符[重复]
【发布时间】:2013-09-27 12:24:25
【问题描述】:

如何从生成的数字列表中删除最后一个管道?

$days = new DatePeriod(new DateTime, new DateInterval('P1D'), 6); 
foreach ($days as $day) { 
    echo strtoupper($day->format('d')+543); 
    echo "|";
}

【问题讨论】:

  • 为什么在号码上使用strtoupper

标签: php datetime foreach


【解决方案1】:

1。连接到字符串,但在之前添加|

$s = '';
foreach ($days as $day) { 
    if ($s) $s .= '|';
    $s .= strtoupper($day->format('d')+543); 
}
echo $s;

2。回显 | 仅当不是最后一项时

$n = iterator_count($days);
foreach ($days as $i => $day) { 
    echo strtoupper($day->format('d')+543);
    if (($i+1) != $n) echo '|';
}

3。加载到数组然后内爆

$s = array();
foreach ($days as $day) { 
    $s[] = strtoupper($day->format('d')+543); 
}
echo implode('|', $s);

4。连接到字符串然后剪切最后一个|(或rtrim它)

$s = '';
foreach ($days as $day) { 
    $s .= strtoupper($day->format('d')+543) . '|';
}
echo substr($s, 0, -1);
# echo rtrim($s, '|');

【讨论】:

  • 轰隆隆。你搞定了。谢谢。
  • @portnoy-the-elder:我编辑了答案,现在更好的解决方案在 #1 下。
【解决方案2】:

在循环中收集输出,并在之前而不是之后添加|

$days = new DatePeriod(new DateTime, new DateInterval('P1D'), 6); 
$echo = '';
foreach ($days as $day) { 
    if ($echo!='') $echo.='|';
    $echo.=strtoupper($day->format('d')+543); 
}
echo $echo;

570|571|572|573|544|545|546

【讨论】:

    【解决方案3】:

    你不能这样做,因为代码是这样写的,因为:

    1. 你不知道会有多少次迭代并且
    2. 您正在直接回显字符串(因此您无法对输出进行后处理)

    实现你想要的结果的一个非常简单的方法是

    echo implode('|', array_map(function($d) { return $d->format('d')+543; },
                                iterator_to_array($days)));
    

    这是通过将$days 的迭代转换为数组,使用array_map 格式化结果并使用标准implode 将它们粘合在一起来实现的。

    【讨论】:

      【解决方案4】:

      剪切最后一个字符:

      echo substr($str,0,-1);
      

      示例

      $days = new DatePeriod(new DateTime, new DateInterval('P1D'), 6); 
      foreach ($days as $day) { 
          $str .= strtoupper($day->format('d')+543); 
          $str .= "|";
      }
      echo substr($str,0,-1);
      

      【讨论】:

        【解决方案5】:

        试试看

        $cnt = count($days);
        $i = 0;
        foreach ($days as $day) { 
            echo strtoupper($day->format('d')+543); 
                if($i++ < $cnt)
                    echo "|";
         }
        

        【讨论】:

        • count 不适用于 DatePeriod 对象。
        【解决方案6】:

        您可以使用输出缓冲来控制回显的内容。

        http://md1.php.net/manual/en/function.ob-start.php

        或内爆解决方案。

        【讨论】:

          猜你喜欢
          • 2018-02-17
          • 1970-01-01
          • 2017-08-19
          • 1970-01-01
          • 2013-07-09
          • 2018-01-03
          • 2013-01-30
          • 1970-01-01
          • 2014-07-13
          相关资源
          最近更新 更多