2012-03-14 9 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>'); 
} 

मैं वर्डप्रेस प्लगइन के लिए नेविगेशन बनाने के लिए एक फ़ोरैच लूप का उपयोग कर रहा हूं, जिस पर मैं काम कर रहा हूं, लेकिन मैं '|' नहीं चाहता आखिरी तत्व के लिए प्रदर्शित होने के लिए, ऊपर दिया गया कोड वह है जो मैंने अभी तक प्राप्त किया है, मैं टिप्पणी पंक्ति पर एक कथन का उपयोग करने के बारे में सोच रहा था, लेकिन यह सुनिश्चित नहीं है कि सबसे अच्छा तरीका क्या होगा, कोई विचार? धन्यवाद!PHP Foreach अगर Array Last

+0

आप पहले और ऊपर की दूसरी और तीसरी गूंज ले जा सकते हैं। फिर यदि (पुनरावृत्ति == first_time) "do_not_echo_2nd, 3rd"। – Neal

+0

इस समाधान पर एक नज़र डालें: http://stackoverflow.com/a/29474468/1478566 – vbarbarosh

उत्तर

64

end() समारोह तुम क्या जरूरत है:

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

धन्यवाद, यह पूरी तरह से काम करता है, मैं इसे उत्तर के रूप में स्वीकार करूंगा, लेकिन मुझे 3 मिनट का इंतजार करना पड़ा। xD –

+21

@ क्रिस्टियन मैथ्यूज, आप लगभग 2 साल अब बीटीडब्ल्यू इंतजार कर रहे थे। :) – Thasmo

+4

माइनर ट्वीक, मैं फ़ोरैच लूप से पहले एक var में कैश एंड ($ टैब 2) कैश करूँगा ताकि अंतिम फ़ंक्शन हर बार नहीं चल सके। – terraling

1

मुझे अंतिम के बजाय पहले की जांच करना आसान लगता है। तो मैं इसके बजाय इस तरह से करूँगा।

$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>"); 
} 

मैंने पिछले दो echos को एक साथ जोड़ा।

+0

सहायता के लिए धन्यवाद, लेकिन यह तुरंत तुरंत $ $ = true सेट करता है, फिर '$ पहले = झूठा; 'अनिवार्य रूप से। –

+0

एचएम, यह आश्चर्य की बात है - यह न केवल प्रत्येक गैर-प्रथम पंक्ति की शुरुआत में ब्रेक को प्रतिबिंबित करता है? –

0

कुछ इस तरह संभव है:

$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

पहली बात आप पता लगाने के लिए सरणी की पिछले कुंजी है क्या जरूरत है, और गिनती() फ़ंक्शन का उपयोग करके सरणी की लंबाई ढूंढकर ऐसा कर रहा है।
बाद में हम एक काउंटर तैयार करेंगे और प्रत्येक लूप पर +1 जोड़ देंगे।
यदि काउंटर और अंतिम कुंजी बराबर होती है तो यह अंतिम कुंजी है।

 

    $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

पहले अंतिम तत्व क्यों नहीं पॉप? इसलिए आपको यह जांचने की आवश्यकता नहीं है कि वर्तमान तत्व प्रत्येक पुनरावृत्ति में अंतिम तत्व है या नहीं।

फ़ंक्शन array_pop ($ सरणी) अंतिम तत्व देता है और इसे सरणी से हटा देता है।

<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

मैं इस तरह से करना होगा:

$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

अंत() अच्छा समारोह

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

उपयोग करने के लिए या आप अधिक समझने के लिए मैन्युअल रूप से यह कर सकते हैं है

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