2012-03-14 22 views
19
foreach($tabs2 as $tab2 => $name){ 
    $class = ($tab2 == $current) ? ' current' : ''; 
    echo("<li class='posts'><a href='?page=pigg&tab=help&tab2=$tab2' class='$class'>$name"); 
    echo(' |'); // If array last then do not display 
    echo('</a></li>'); 
} 

Tôi đang sử dụng vòng lặp foreach để tạo điều hướng cho plugin WordPress mà tôi đang làm, nhưng tôi không muốn '|' được hiển thị cho phần tử cuối cùng, mã ở trên là những gì tôi đã có cho đến nay, tôi đã nghĩ đến việc sử dụng câu lệnh if trên dòng nhận xét, nhưng không chắc cách tiếp cận tốt nhất sẽ là gì, ý tưởng nào? Cảm ơn!PHP Foreach If Array Lần cuối

+0

Bạn có thể di chuyển tiếng vọng thứ 2 và thứ 3 ở trên đầu tiên. Sau đó, nếu (iteration == first_time) "do_not_echo_2nd, 3rd". – Neal

+0

Hãy xem giải pháp này: http://stackoverflow.com/a/29474468/1478566 – vbarbarosh

Trả lời

64

Các end() chức năng là những gì bạn cần:

if(end($tabs2) !== $name){ 
    echo ' |'; // not the last element 
} 
+0

Cảm ơn bạn, điều này đã làm việc một cách hoàn hảo, tôi sẽ chấp nhận điều này như là câu trả lời, nhưng tôi phải đợi 3 phút. xD –

+21

@KristianMatthews, bạn gần như đã đợi 2 năm nay btw. :) – Thasmo

+4

Tinh chỉnh nhỏ, tôi sẽ kết thúc bộ nhớ cache ($ tabs2) trong một var trước vòng lặp foreach để chức năng kết thúc không chạy mỗi lần. – terraling

1

Tôi thấy dễ dàng hơn để kiểm tra trước tiên, thay vì cuối cùng. Vì vậy, tôi sẽ làm theo cách này thay thế.

$first = true; 
foreach($tabs2 as $tab2 => $name){ 
    if ($first) { 
     $first = false; 
    } else { 
     echo(' | '); 
    } 
    $class = ($tab2 == $current) ? ' current' : ''; 
    echo("<li class='posts'><a href='?page=pigg&tab=help&tab2=$tab2' class='$class'>$name</a></li>"); 
} 

Tôi cũng kết hợp hai ảnh cuối cùng echos với nhau.

+0

Cảm ơn sự giúp đỡ, nhưng điều này ngay lập tức đặt '$ first = true;' sau đó '$ first = false;' về cơ bản. –

+0

Hm, điều đó thật đáng ngạc nhiên - nó không chỉ lặp lại dấu ngắt ở đầu mỗi dòng đầu tiên? –

0

Something như thế này có thể:

$size = count($tabs2); 
$counter = 0; 
foreach($tabs2 as $tab2 => $name){ 
    $class = ($tab2 == $current) ? ' current' : ''; 
    echo("<li class='posts'><a href='?page=pigg&tab=help&tab2=$tab2' class='$class'>$name"); 
    if (++$counter < $size){ 
     echo(' |'); // If array last then do not display  
    } 
    echo('</a></li>'); 
} 
1

Điều đầu tiên bạn cần phải tìm ra chìa khóa cuối cùng của mảng là gì, và làm như vậy bằng cách tìm độ dài mảng, sử dụng hàm count().
Sau đó, chúng ta sẽ tạo bộ đếm và thêm +1 trên mỗi vòng lặp.
Nếu bộ đếm và khóa cuối cùng bằng nhau thì đó là chìa khóa cuối cùng.

 

    $last = count($array); 
    $counter = 1; 
    foreach ($array as $key => $val){ 
    if ($counter != $last){ 
     // all keys but the last one 
     // do something  
     $counter++; // add one to counter count 
     } 
     else { 
      // this is for the last key 
    }// end else 

}// end foreach 

0

Tại sao không bật phần tử cuối cùng trước? Vì vậy, bạn không cần phải kiểm tra xem phần tử hiện tại có phải là phần tử cuối cùng trong mỗi lần lặp hay không.

Hàm array_pop (& $ array) trả về phần tử cuối cùng và xóa nó khỏi mảng.

<div id="breadcrumb"> 
    <?php 
     $lastBreadcrumb = array_pop($breadcrumb); 
     foreach ($breadcrumb as $crumb){ ?> 
      <a href=""><?php echo $crumb; ?></a> 
     <?php } ?><span><?php echo $lastBreadcrumb?></span> 
</div> 
1

tôi sẽ làm theo cách này:

$arrLi = array(); 
foreach($tabs2 as $tab2 => $name){ 
    $class = ($tab2 == $current) ? ' current' : ''; 
    $arrLi[] = "<li class='posts'><a href='?page=pigg&tab=help&tab2=$tab2' class='$class'>$name</a></li>"; 
} 
echo implode('|', $arrLi); 
1

end() là chức năng tốt để sử dụng

foreach($tabs2 as $tab2 => $name){ 
if(end($tabs2)== $name) 
echo "|"; 
} 

hoặc bạn có thể làm điều đó bằng tay cho sự hiểu biết hơn

$copyofarry = $tabs2; 
    $last = array_pop($copyofarry); 
    foreach($tabs2 as $tab2 => $name){ 
     if($last == $name) 
     echo "|"; 
    }