2011-10-11 176 views
1

我有一個代碼塊,它可以完美地處理關於不同辦公室位置的數據。PHP foreach循環代碼更改的最後一次迭代

我想要做的是能夠使這個循環的最後一次迭代改變div類到別的東西,所以我可以應用一組不同的CSS樣式。

$fields = get_group('Offices'); 

      foreach($fields as $field){ 
       echo'<div class="oloc">'; 
       if($locationVar==NULL || $locationVar!=$field['office-location'][1]) { 
        echo '<a name="' . strtolower(str_replace(' ', '-', $field['office-location'][1])) . '"></a><h3>' . $field['office-location'][1] . '</h3>'; 
        $locationVar = $field['office-location'][1]; 
       } else { 
        echo "<br />"; 
       } 

       if($field['office-gm'][1]){ 
        echo '<div class="gm"><img src="http://maps.googleapis.com/maps/api/staticmap?center=' . $field['office-gm'][1] . '&zoom=9&size=250x250&markers=color:blue|label:A|' . $field['office-gm'][1] . '&sensor=false"></div>'; 
       } 

       if($field['office-name'][1]){ 
        echo '<strong>' . $field['office-name'][1] . '</strong><br /><br />'; 
       } 

       if($field['office-phone'][1]){ 
        echo 'Phone: ' . $field['office-phone'][1] . '<br />'; 
       } 

       if($field['office-fax'][1]){ 
        echo 'Fax: ' . $field['office-fax'][1] . '<br />'; 
       } 

       if($field['office-address'][1]){ 
        echo '<br />Address:<br />' . strip_tags($field['office-address'][1], '<br><br />') . '<br />'; 
       } 

       if($field['office-webpage'][1]){ 
        echo 'Web: ' . '<a href="' . $field['office-webpage'][1] . '">Office Webpage</a><br />'; 
       } 

       if($field['office-email'][1]){ 
        echo 'Email: ' . '<a href="' . $field['office-email'][1] . '">Office Email</a><br />'; 
       } 
       if($field['office-emp'][1]){ 
        echo 'Jobs: ' . '<a href="' . $field['office-emp'][1] . '">Employment Application</a><br />'; 
       } 

       if($field['office-fb'][1]){ 
        echo 'Facebook: ' . '<a href="' . $field['office-fb'][1] . '">Facebook</a><br />'; 
       } 
       if($field['office_office_twitter'][1]){ 
        echo 'Twitter: ' . '<a href="' . $field['office_office_twitter'][1] . '">Twitter</a><br />'; 
       } 
      echo '</div>'; 
      } 
+1

看到這個問題:http://stackoverflow.com/q/665135/902654 – someone

+1

根據您的預期水平的瀏覽器支持,你可以使用[':last-child'選擇器](http://reference.sitepoint.com/css/pseudoclass-lastchild) – Phil

回答

0

把每個回聲放在一個var中,這個類定義在另一個var中。然後在你的foreach結束時,你檢查,像這樣:

$i = 0; 
foreach(... 

if($i == count($fields)) { // change class } 
0

試試這個

$i = 0; 
$total = count($fields); 
$final = false; 
foreach($fields as $field){ 

    $i++; 
    $final = ($i + 1 == $total)? true : false; 

    if($final) 
     echo'<div class="NEW_CLASS">'; 
    else 
     echo'<div class="oloc">'; 

    .... 
} 
+0

不是'$ i ++; $ final =($ i + 1 == $ total)? true:false;'做同樣的(更短的)代碼:'$ final = ++ $ i + 1 == $ total' – Luc

+0

K,是的,它更短,但爲什麼這會值得讚賞? – brenjt

+0

我不認爲這篇文章比其他任何文章都好,這就是爲什麼。無論如何,你從upvote獲得了更多的代表。此外,你可以像這樣優化它:http://hastebin.com/pomaviqare.php – Luc

0

首先,你應該得到的辦事處的總數,這樣當你在最後一次迭代,你可以對此做點什麼。

$fields = get_group('Offices'); 
$fields_count = count($fields); 

$i = 0; 

foreach ($fields as $field) { 

    $is_final = ++$i == $fields_count; 

    echo '<div class="oloc' . ($is_final ? ' oloc-final' : '') . '">';  

    [...] 

} 
+0

這似乎工作完美謝謝... –

0

對於喜歡這些,你可以使用一個CachingIteratorhasNext()方法的情況:

$fields = get_group('Offices'); 

$it = new CachingIterator(new ArrayIterator($fields)); 
foreach($it as $field) 
{ 
    ... 
    if (!$it->hasNext()) echo 'Last:'; 
    ... 
} 
相關問題