2010-06-16 17 views
3

在Web開發中,我經常發現我需要格式化和打印各種數據數組,並以某種方式分離這些數據塊。換句話說,我需要能夠在每個循環的之間插入代碼,而不是在第一個條目之前或最後一個之後插入所述代碼。我發現做到這一點,最優雅的方式如下:環之間插入代碼的優雅方法

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

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

不幸的是,有沒有辦法,我可以看到實現與的foreach而不是此解決方案。有誰知道一個更優雅的解決方案,將與foreach一起工作?

回答

3

我認爲您正在尋找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

1

不幸的是,我不認爲有什麼辦法可以用foreach來做到這一點。這是許多語言的問題。

我通常解決這一兩種方式:

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

您的第一個解決方案非常有用。謝謝。 – 2010-06-17 00:14:36

0

一招我有時用:

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

0

如果更復雜的代碼,那麼破滅可能處理我會使用一個簡單的布爾:

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

我在理論上喜歡這個答案,在發佈之前我用它玩了一段時間,但是在我看來,必須在循環外部定義變量使得它比使用簡單for循環更不乾淨。感謝您的意見。 – 2010-06-17 00:13:52