环之间插入代码的优雅方法

问题描述:

在Web开发中,我经常发现我需要格式化和打印各种数据数组,并以某种方式分离这些数据块。换句话说,我需要能够在每个循环的之间插入代码,而不是在第一个条目之前或最后一个之后插入所述代码。我发现做到这一点,最优雅的方式如下:环之间插入代码的优雅方法

function echoWithBreaks($array){ 
    for($i=0; $i<count($array); $i++){ 
     //Echo an item 

     if($i<count($array)-1){ 
      //Echo "between code" 
     } 
    } 
} 

不幸的是,有没有办法,我可以看到实现与的foreach而不是此解决方案。有谁知道一个更优雅的解决方案,将与foreach一起工作?

我认为您正在寻找implode函数。

然后只是回显内爆的字符串。


唯一的更优雅我能想到的是制作精确算法是这样的:

function implodeEcho($array, $joinValue) 
{ 
    foreach($array as $i => $val) 
    { 
     if ($i != 0) echo $joinValue; 
     echo $val; 
    } 
} 

当然,这是假设$阵列仅由整数,而不是由键索引。

+0

这将做工精美,如果我只需要在单词或单词之间插入某些内容。然而,我需要分离大块代码,并且围绕一段不确定长度的代码块使大块HTML大量混乱。我很抱歉,如果从使用HTML块的问题不明确。 – 2010-06-17 00:00:27

+0

更新了我的回复。 – Aren 2010-06-17 00:06:02

+0

有趣的更新。这可能正是我需要的。谢谢! – 2010-06-17 00:11:41

不幸的是,我不认为有什么办法可以用foreach来做到这一点。这是许多语言的问题。

我通常解决这一两种方式:

  1. 你上面提到的方式,除了与$i > 0而非$i < count($array) - 1
  2. 使用joinimplode
+0

您的第一个解决方案非常有用。谢谢。 – 2010-06-17 00:14:36

一招我有时用:

function echoWithBreaks($array){ 
    $prefix = ''; 
    foreach($array as $item){ 
     echo $prefix; 
     //Echo item 

     $prefix = '<between code>'; 
    } 
} 
+0

不,它不!这与Wrikken的答案类似,除了它不需要if。 – Artelius 2010-06-17 00:20:18

+0

哎呦。对不起 - 误读。这是一个合法的解决方案 - 不过,正如我告诉Wrikken,foreach循环之外的初始化变量让我有点畏缩。感谢您的回应。 – 2010-06-17 00:43:01

如果更复杂的代码,那么破灭可能处理我会使用一个简单的布尔:

$looped = false; 
foreach($arr as $var){ 
    if($looped){ 
     //do between 
    } 
    $looped = true; 
    //do something with $var 
} 
+0

我在理论上喜欢这个答案,在发布之前我用它玩了一段时间,但是在我看来,必须在循环外部定义变量使得它比使用简单for循环更不干净。感谢您的意见。 – 2010-06-17 00:13:52