एक फॉर्च लूप में पहली और आखिरी यात्रा का निर्धारण कैसे करें?


494

प्रश्न सरल है। मेरे पास एकforeachमेरे कोड में लूप है:

foreach($array as $element) {
    //code
}

इस लूप में, मैं पहले या अंतिम पुनरावृत्ति में होने पर अलग तरह से प्रतिक्रिया करना चाहता हूं।

यह कैसे करना है?

जवाबों:


426

आप एक काउंटर का उपयोग कर सकते हैं:

$i = 0;
$len = count($array);
foreach ($array as $item) {
    if ($i == 0) {
        // first
    } else if ($i == $len - 1) {
        // last
    }
    // …
    $i++;
}

24
मुझे नहीं लगता कि डाउनवोटिंग यहां होनी चाहिए क्योंकि यह भी सही तरीके से काम कर रहा है और अभी भी उपयोग के रूप में इतना बकवास नहीं है array_shiftऔर array_pop। हालाँकि यह एक ऐसा उपाय है, अगर मुझे इस तरह की बात पर अमल करना होता है, तो मैं अब रोख क्रालज के जवाब के साथ रहूँगा
shadyyx

15
यदि मुझे एक काउंटर की आवश्यकता है, तो मैं फॉरएच के बजाय लूप का उपयोग करना पसंद करता हूं।
22

10
यदि आप उपयोग करते हैं $i = 1, तो आपको चिंता करने की जरूरत नहीं है $len - 1, बस उपयोग करें $len
aksu

2
@Twan कैसे बिंदु # 3 सही है? या इस प्रश्न के लिए प्रासंगिक है क्योंकि इसमें HTML शामिल है? यह एक PHP प्रश्न है, स्पष्ट रूप से ... और जब यह शब्द-अप शब्दार्थ की बात आती है, तो यह "एक उचित ब्लाहबला हमेशा ब्लाहब्लह से बेहतर है (यह मेरी राय भी नहीं है, यह शुद्ध तथ्य है) की तुलना में बहुत गहरे तथ्यों के लिए नीचे है"
देजी

1
@rkawano लेकिन आप नहीं मिल सकता है नामित कुंजी अगर आप पाश के लिए उपयोग
Fahmi

1014

यदि आप एक ऐसे समाधान को पसंद करते हैं जिसमें लूप के बाहर काउंटर के आरंभीकरण की आवश्यकता नहीं है, तो मैं उस फ़ंक्शन के खिलाफ वर्तमान पुनरावृत्ति कुंजी की तुलना करने का प्रस्ताव करता हूं जो आपको सरणी की अंतिम / पहली कुंजी बताता है।

यह आगामी PHP 7.3 के साथ कुछ अधिक कुशल (और अधिक पठनीय) हो जाता है।

PHP 7.3 और ऊपर के लिए समाधान:

foreach($array as $key => $element) {
    if ($key === array_key_first($array))
        echo 'FIRST ELEMENT!';

    if ($key === array_key_last($array))
        echo 'LAST ELEMENT!';
}

सभी PHP संस्करणों के लिए समाधान:

foreach($array as $key => $element) {
    reset($array);
    if ($key === key($array))
        echo 'FIRST ELEMENT!';

    end($array);
    if ($key === key($array))
        echo 'LAST ELEMENT!';
}

44
शानदार जवाब! सरणियों के एक गुच्छा का उपयोग करने की तुलना में बहुत क्लीनर।
पॉल जे

14
यह शीर्ष पर सभी तरह से बुलबुला होना चाहिए क्योंकि यह सही उत्तर है। Array_shift और array_pop का उपयोग करने पर इन कार्यों का एक और लाभ यह है कि सरणियों को बरकरार रखा जाता है, अगर उन्हें बाद के बिंदु पर आवश्यकता होती है। केवल ज्ञान को साझा करने के लिए +1।
अवीमो

13
यदि आप अपने कोड को साफ रखना चाहते हैं तो यह निश्चित रूप से सबसे अच्छा तरीका है। मैं इसे उभारने वाला था, लेकिन अब मैं आश्वस्त नहीं हूं कि उन तरीकों के कार्यात्मक ओवरहेड इसके लायक हैं। अगर हम केवल अंतिम तत्व के बारे में बात कर रहे हैं, तो यह लूप के हर पुनरावृत्ति पर end()+ है key()- यदि यह दोनों है तो यह है कि हर बार 4 तरीके कहे जा रहे हैं। दी, वे बहुत हल्के ऑपरेशन होंगे और शायद सिर्फ पॉइंटर लुकअप हैं, लेकिन फिर डॉक्स यह निर्दिष्ट करने के लिए आगे बढ़ते हैं reset()और सरणी के आंतरिक पॉइंटर को end() संशोधित करते हैं - तो क्या यह काउंटर की तुलना में तेज है? शायद नहीं।
पोस्पी

19
मुझे नहीं लगता कि आपको फॉर्च्यूनर के अंदर रीसेट ($ सरणी) जारी करना चाहिए। आधिकारिक दस्तावेज़ीकरण (www.php.net/foreach) से: "के रूप में foreach आंतरिक सरणी सूचक पर निर्भर करता है इसे लूप के भीतर बदलने से अप्रत्याशित व्यवहार हो सकता है।" और रीसेट ठीक यही करता है (www.php.net/reset): "किसी सरणी के आंतरिक पॉइंटर को उसके पहले तत्व पर सेट करें"
गोंकेलो क्वैरोस

11
@ गोंकेलाक्यूएरियो: यह काम करता है। फ़ॉर्च सरणी की एक प्रति पर काम करता है। हालांकि, अगर आप अभी भी चिंतित हैं, reset()तो फोर्क से पहले कॉल को स्थानांतरित करने और परिणाम को कैश करने के लिए स्वतंत्र महसूस करें $first
रोक क्रालज

121

अंतिम आइटम खोजने के लिए, मुझे हर बार कोड का यह टुकड़ा काम आता है:

foreach( $items as $item ) {
    if( !next( $items ) ) {
        echo 'Last Item';
    }
}

2
यह बहुत कम upvotes है, क्या इसका उपयोग करने में कोई कमी है?
केविन कुइल


2
@ केविन कुइल - जैसा कि ऊपर पैंग ने उल्लेख किया है, अगर सरणी में एक आइटम है जो PHP के रूप में गलत (यानी 0, "", अशक्त) मूल्यांकन करता है, तो इस पद्धति के अप्रत्याशित परिणाम होंगे। मैंने कोड का उपयोग करने के लिए संशोधन किया है ===
एरिक किगाथी

4
यह ज्यादातर बहुत ही भयानक है, लेकिन समस्या को स्पष्ट करने के लिए दूसरों को इंगित कर रहे हैं कि यह हमेशा की तरह सरणी के साथ विफल हो जाएगा [true,true,false,true]। लेकिन व्यक्तिगत रूप से मैं इस का उपयोग कर रहा हूँ कभी भी मैं एक सरणी के साथ काम कर रहा हूँ जिसमें बूलियन शामिल नहीं है false
billynoah

4
next()कभी भी फ़ॉरच लूप के अंदर इस्तेमाल नहीं किया जाना चाहिए । यह आंतरिक सरणी पॉइंटर को मैसेज करता है। अधिक जानकारी के लिए दस्तावेज़ देखें।
द्राज़ा

89

उपरोक्त और अधिक सरलीकृत संस्करण जो आप कस्टम अनुक्रमित का उपयोग नहीं कर रहे हैं ...

$len = count($array);
foreach ($array as $index => $item) {
    if ($index == 0) {
        // first
    } else if ($index == $len - 1) {
        // last
    }
}

संस्करण 2 - क्योंकि मैं आवश्यक होने तक दूसरे का उपयोग करके घृणा करने आया हूं।

$len = count($array);
foreach ($array as $index => $item) {
    if ($index == 0) {
        // first
        // do something
        continue;
    }

    if ($index == $len - 1) {
        // last
        // do something
        continue;
    }
}

8
यह वस्तुओं के लिए भी काम करता है। अन्य समाधान केवल सरणियों के लिए काम करते हैं।
लैमी

1
यह मेरे लिए सबसे अच्छा उत्तर है लेकिन घनीभूत होना चाहिए, फ़ॉरच लूप के बाहर की लंबाई की घोषणा करने वाला कोई बिंदु नहीं: अगर ($ इंडेक्स == काउंट ($ सरणी) -1) {...}
एंड्रयू

2
@ इस तरह से आप हर पुनरावृत्ति के लिए सरणी के तत्वों को गिनते रहें।
पीसीरवलहो

1
@peteroak हां वास्तव में यह तकनीकी रूप से प्रदर्शन को नुकसान पहुंचाएगा, और यह निर्भर करता है कि आपकी गिनती या कितने लूप महत्वपूर्ण हो सकते हैं। इसलिए मेरी टिप्पणी की अवहेलना करें: D
एंड्रयू

4
@peteroak @Andrew एक सरणी में तत्वों की कुल संख्या को आंतरिक रूप से एक संपत्ति के रूप में संग्रहीत किया जाता है, इसलिए ऐसा करने से कोई भी प्रदर्शन हिट नहीं होगा if ($index == count($array) - 1)। देखें यहाँ
GreeKrrina

36

आप सरणी से पहले और अंतिम तत्वों को निकाल सकते हैं और उन्हें अलग से संसाधित कर सकते हैं।

ऐशे ही:

<?php
$array = something();
$first = array_shift($array);
$last = array_pop($array);

// do something with $first
foreach ($array as $item) {
 // do something with $item
}
// do something with $last
?>

इनलाइन टैग के बजाय CSS के सभी फॉर्मेटिंग को हटाने से आपके कोड में सुधार होगा और लोड समय में तेजी आएगी।

जब भी संभव हो आप HTML को php लॉजिक के साथ मिलाने से बच सकते हैं।

इस तरह की चीजों को अलग करके आपके पृष्ठ को और अधिक पठनीय और बनाए रखा जा सकता है:

<?php
function create_menu($params) {
  //retrieve menu items 
  //get collection 
  $collection = get('xxcollection') ;
  foreach($collection as $c) show_collection($c);
}

function show_subcat($val) {
  ?>
    <div class="sub_node" style="display:none">
      <img src="../images/dtree/join.gif" align="absmiddle" style="padding-left:2px;" />
      <a id="'.$val['xsubcatid'].'" href="javascript:void(0)" onclick="getProduct(this , event)" class="sub_node_links"  >
        <?php echo $val['xsubcatname']; ?>
      </a>
    </div>
  <?php
}

function show_cat($item) {
  ?>
    <div class="node" >
      <img src="../images/dtree/plus.gif" align="absmiddle" class="node_item" id="plus" />
      <img src="../images/dtree/folder.gif" align="absmiddle" id="folder">
      <?php echo $item['xcatname']; ?>
      <?php 
        $subcat = get_where('xxsubcategory' , array('xcatid'=>$item['xcatid'])) ;
        foreach($subcat as $val) show_subcat($val);
      ?>
    </div>
  <?php
}

function show_collection($c) {
  ?>
    <div class="parent" style="direction:rtl">
      <img src="../images/dtree/minus.gif" align="absmiddle" class="parent_item" id="minus" />
      <img src="../images/dtree/base.gif" align="absmiddle" id="base">
      <?php echo $c['xcollectionname']; ?>
      <?php
        //get categories 
        $cat = get_where('xxcategory' , array('xcollectionid'=>$c['xcollectionid']));
        foreach($cat as $item) show_cat($item);
      ?>
    </div>
  <?php
}
?>

20

पहले खोजने का प्रयास होगा:

$first = true; 
foreach ( $obj as $value )
{
  if ( $first )
  {
    // do something
    $first = false; //in order not to get into the if statement for the next loops
  }
  else
  {
    // do something else for all loops except the first
  }
}

3
कृपया अपने जवाब को संपादित करें कि आपका कोड कैसे काम करता है और यह कैसे ओपी की समस्या को हल करता है। कई एसओ पोस्टर नए हैं और आपके द्वारा पोस्ट किए गए कोड को नहीं समझ पाएंगे।
मैं 15

4
यह उत्तर यह नहीं बताता है कि यदि आप लूप के अंतिम पुनरावृत्ति में हैं तो यह निर्धारित कैसे करें। हालांकि, यह एक उत्तर में एक वैध प्रयास है, और इसे एक उत्तर के रूप में चिह्नित नहीं किया जाना चाहिए। यदि आपको यह पसंद नहीं है, तो आपको इसे वोट करना चाहिए, इसे ध्वजांकित नहीं करना चाहिए।
ArtOfWarfare

यह स्पष्ट है, पहले पुनरावृत्ति में वह पहली स्थिति में प्रवेश करेगा और फिर इसे गलत में बदल देगा, और इस तरह यह केवल एक बार पहले पुनरावृत्ति में मिलेगा।
मोहम्मदीघगर्बी

20

बस यह काम करता है!

// Set the array pointer to the last key
end($array);
// Store the last key
$lastkey = key($array);  
foreach($array as $key => $element) {
    ....do array stuff
    if ($lastkey === key($array))
        echo 'THE LAST ELEMENT! '.$array[$lastkey];
}

अंत मुद्दे को सुलझाने के लिए @billynoah को धन्यवाद ।


3
श्रेष्ठ! मैं केवल स्पष्ट करूंगा if ($key === $lastkey)
Krzysztof Przygoda

2
क्या यह नहीं होना चाहिए if ($lastkey === $key)?
काइनेटिक

1
मुझे मिलता है:PHP Warning: key() expects parameter 1 to be array, integer given in php shell code on line 1
billynoah

1
@Sydwell - त्रुटि पढ़ें। key()पूर्णांक मिल रहा है, नहीं end()end()" अंतिम तत्व का मान देता है ", और key()इनपुट के रूप में एक सरणी की अपेक्षा करता है।
billynoah


11

1: एक साधारण forकथन का उपयोग क्यों न करें ? मान लें कि आप एक वास्तविक सरणी का उपयोग कर रहे हैं और Iteratorआप आसानी से जांच सकते हैं कि काउंटर चर 0 है या तत्वों की पूरी संख्या से कम है। मेरी राय में यह सबसे साफ और समझने योग्य उपाय है ...

$array = array( ... );

$count = count( $array );

for ( $i = 0; $i < $count; $i++ )
{

    $current = $array[ $i ];

    if ( $i == 0 )
    {

        // process first element

    }

    if ( $i == $count - 1 )
    {

        // process last element

    }

}

2: आपको अपनी ट्री संरचना को संग्रहीत करने के लिए नेस्टेड सेट का उपयोग करने पर विचार करना चाहिए । इसके अतिरिक्त आप पुनरावर्ती कार्यों का उपयोग करके पूरी बात को सुधार सकते हैं।


यदि आप एक का उपयोग करने जा रहे हैं forसे आप पाश कर सकते हैं 1करने के लिए n-1और ले ifशरीर से बाहर है। बार-बार उन्हें चेक करने का कोई मतलब नहीं।
एमपीएन

9

सबसे बढ़िया उत्तर:

$arr = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

foreach ($arr as $a) {

// This is the line that does the checking
if (!each($arr)) echo "End!\n";

echo $a."\n";

}

2
यह विफल रहता है जब आपके पास सरणी में केवल एक तत्व होता है।
मेमोचिपन

4
यह तेज और आसान है जब तक आप यह सुनिश्चित कर सकते हैं कि सरणी में हमेशा एक से अधिक लीमेंट हैं (जैसा कि मेमोचिपन ने कहा)। तो यह मेरे लिए एक असफल समाधान नहीं है - कोई 'सर्वश्रेष्ठ जवाब' नहीं।
सीका 14५

5
प्रत्येक () PHP 7.2.0 के रूप में निर्धारित किया जाएगा । यह भी देखना कृपया php.net/manual/en/function.each.php
फ्लो

8

@Morg से सबसे कुशल जवाब , इसके विपरीत foreach, केवल उचित सरणियों के लिए काम करता है, हैश मैप ऑब्जेक्ट नहीं। यह उत्तर लूप के प्रत्येक पुनरावृत्ति के लिए एक सशर्त विवरण के ओवरहेड से बचा जाता है, क्योंकि इनमें से अधिकांश उत्तर (स्वीकृत उत्तर सहित) विशेष रूप से पहले और अंतिम तत्व को संभालकर, और मध्य तत्वों पर लूपिंग करते हैं।

array_keysसमारोह की तरह कुशल जवाब काम करने के लिए इस्तेमाल किया जा सकता foreach:

$keys = array_keys($arr);
$numItems = count($keys);
$i=0;

$firstItem=$arr[$keys[0]];

# Special handling of the first item goes here

$i++;
while($i<$numItems-1){
    $item=$arr[$keys[$i]];
    # Handling of regular items
    $i++;
}

$lastItem=$arr[$keys[$i]];

# Special handling of the last item goes here

$i++;

मैंने इस पर बेंचमार्किंग नहीं की है, लेकिन लूप में कोई तर्क नहीं जोड़ा गया है, जो प्रदर्शन के लिए सबसे बड़ी हिट हैं, इसलिए मुझे संदेह होगा कि कुशल जवाब के साथ प्रदान किए गए बेंचमार्क बहुत करीब हैं।

यदि आप इस तरह की चीज को फंक्शनल करना चाहते हैं , तो मैंने इस तरह के एक इटैलिएलिस्ट फंक्शन में स्विंग लिया है । हालाँकि, यदि आप दक्षता के बारे में सुपर चिंतित हैं, तो आप जिस्ट कोड को बेंचमार्क करना चाह सकते हैं। मुझे यकीन नहीं है कि सभी फ़ंक्शन इनवोकेशन का परिचय कितना ओवरहेड है।


6

SQL क्वेरी स्क्रिप्ट बनाने के लिए, या ऐसी कोई भी चीज़ जो पहले या अंतिम तत्वों के लिए अलग-अलग क्रिया करती है, यह बहुत अधिक तेज़ (लगभग दो बार तेज़) है, जो कि अस्वाभाविक चर जाँच से बचने के लिए है।

वर्तमान स्वीकृत समाधान एक लूप और लूप के भीतर एक चेक का उपयोग करता है जिसे हर_सिंगल_टिरियन बनाया जाएगा, ऐसा करने का सही (तेज़) तरीका निम्नलिखित है:

$numItems = count($arr);
$i=0;
$firstitem=$arr[0];
$i++;
while($i<$numItems-1){
    $some_item=$arr[$i];
    $i++;
}
$last_item=$arr[$i];
$i++;

थोड़ा घर का बना बेंचमार्क निम्नलिखित दिखाया गया है:

टेस्ट 1: मॉडल मॉर्ग के 100000 रन

समय: 1869.3430423737 मिलीसेकंड

test2: यदि अंतिम हो तो मॉडल के 100000 रन

समय: 3235.6359958649 मिलीसेकंड

और इस प्रकार यह बिल्कुल स्पष्ट है कि चेक की लागत बहुत अधिक है, और निश्चित रूप से यह और भी बदतर हो जाता है जितना अधिक चर चेक आप जोड़ते हैं;)


आपका कोड केवल तभी काम करता है जब आप पूर्णांक कुंजियाँ बढ़ाना सुनिश्चित कर सकते हैं। $arr = array('one' => "1 1 1", 4 => 'Four', 1 => 'One'); $numItems = count($arr); $i=0; $firstitem=$arr[0]; echo $i . ': ' . $firstitem . ", "; $i++; while($i<$numItems-1){ $some_item=$arr[$i]; echo $i . ': ' . $some_item . ", "; $i++; } $last_item=$arr[$i]; echo $i . ': ' . $last_item . ", "; $i++;उत्पादन होगा:0: , 1: One, 2: ,
Seika85

किसी सरणी को हैश मैप में डालना अपरिहार्य व्यवहार है, "ऑब्जेक्ट" array()बनाया गया है, {'one':"1 1 1",0:"",1:"One",2:"",3:"",4:"Four"}लेकिन खाली तत्वों को गिनती के साथ अनदेखा किया जाता है, आप परिभाषित "चीजों" की संख्या की गिनती कर रहे हैं !! बाउंटी सैक्रीज़ की स्थापना! यह उत्तर इनाम योग्य है, लेकिन अगर @Morg। चला गया, यह व्यर्थ है। मैं एक ऐसे व्यक्ति को इनाम दूंगा जो शायद एसओ का फिर से इस्तेमाल नहीं करेगा! यदि वह वापस आता है और अपने जवाब में सुधार करता है, तो वह इनाम का हकदार है!
mjz19910

@ Mjz19910 नोट के रूप में, हैश मैप और सरणियाँ विनिमेय नहीं हैं। हालाँकि, आप array_keysफ़ंक्शन के साथ हैश के गुण प्राप्त कर सकते हैं , जिसे आप एक सरणी की तरह मान सकते हैंमेरा "बेहतर" उत्तर देखें ।
मैड्यूपेलर

यही मैं क्वेरी के लिए उपयोग करता हूं:$querySet = ""; foreach ($fieldSet as $key=>$value) { $value = $db->dbLink->quote($value); $querySet .= "$key = $value, "; } $querySet = substr_replace($querySet, "", -2); $queryString = "UPDATE users SET $querySet WHERE user_ID = '$user_ID'";
रोवाशन ममेदोव

5

कुंजी और मान के साथ यह काम करता है:

foreach ($array as $key => $value) {
    if ($value === end($array)) {
        echo "LAST ELEMENT!";
    }
}

2
इस तरह से आप मानों की तुलना कर रहे हैं और किसी सरणी में दो समान तत्व होने पर काम नहीं करता है।
क्रिज़ीस्तोफ़ प्रिज़गोडा

5

बूलियन चर का उपयोग करना अभी भी सबसे विश्वसनीय है, भले ही आप पहली उपस्थिति की जांच करना चाहते हों $value (मुझे यह मेरी स्थिति में और कई स्थितियों में अधिक उपयोगी लगा) , जैसे कि:

$is_first = true;

foreach( $array as $value ) {
    switch ( $value ) {
        case 'match':
            echo 'appeared';

            if ( $is_first ) {
                echo 'first appearance';
                $is_first = false;
            }

            break;
        }
    }

    if( !next( $array ) ) {
        echo 'last value';
    }
}

फिर !next( $array )अंतिम को कैसे खोजेंगे $valueजो trueयदि नहीं है तो वापस आ जाएगीnext() पुनरावृत्ति के लिए मूल्य ।

और मैं forइसके बजाय एक लूप का उपयोग करना पसंद करता foreachहूं अगर मैं इस तरह से एक काउंटर का उपयोग करने जा रहा हूं:

$len = count( $array );
for ( $i = 0; $i < $len; $i++ ) {
    $value = $array[$i];
    if ($i === 0) {
        // first
    } elseif ( $i === $len - 1 ) {
        // last
    }
    // …
    $i++;
}

4

जब मैं एक ही समस्या है मैं इस धागे में आया था। मुझे केवल पहला तत्व प्राप्त करने की आवश्यकता है फिर मैं अपने कोड का फिर से विश्लेषण करता हूं जब तक कि यह मेरे दिमाग में नहीं आया।

$firstElement = true;

foreach ($reportData->result() as $row) 
{
       if($firstElement) { echo "first element"; $firstElement=false; }
       // Other lines of codes here
}

उपरोक्त कोड महान और पूर्ण हैं लेकिन अगर आपको केवल पहले तत्व की आवश्यकता है तो आप इस कोड को आज़मा सकते हैं।


2

यकीन नहीं तो अभी भी जरूरी है। लेकिन निम्न समाधान पुनरावृत्तियों के साथ काम करना चाहिए और इसकी आवश्यकता नहीं है count

<?php

foreach_first_last(array(), function ($key, $value, $step, $first, $last) {
    echo intval($first), ' ', intval($last), ' ', $step, ' ', $value, PHP_EOL;
});

foreach_first_last(array('aa'), function ($key, $value, $step, $first, $last) {
    echo intval($first), ' ', intval($last), ' ', $step, ' ', $value, PHP_EOL;
});
echo PHP_EOL;

foreach_first_last(array('aa', 'bb', 'cc'), function ($key, $value, $step, $first, $last) {
    echo intval($first), ' ', intval($last), ' ', $step, ' ', $value, PHP_EOL;
});
echo PHP_EOL;

function foreach_first_last($array, $cb)
{
    $next = false;
    $current = false;
    reset($array);
    for ($step = 0; true; ++$step) {
        $current = $next;
        $next = each($array);
        $last = ($next === false || $next === null);
        if ($step > 0) {
            $first = $step == 1;
            list ($key, $value) = $current;
            if (call_user_func($cb, $key, $value, $step, $first, $last) === false) {
                break;
            }
        }
        if ($last) {
            break;
        }
    }
}

0

आप एक अनाम फ़ंक्शन का भी उपयोग कर सकते हैं:

$indexOfLastElement = count($array) - 1;
array_walk($array, function($element, $index) use ($indexOfLastElement) {
    // do something
    if (0 === $index) {
        // first element‘s treatment
    }
    if ($indexOfLastElement === $index) {
        // last not least
    }
});

तीन और बातों का उल्लेख किया जाना चाहिए:

  • यदि आपकी सरणी को सख्ती से अनुक्रमित नहीं किया जाता है (संख्यात्मक रूप से) तो आपको array_valuesपहले से अपने सरणी को पाइप करना होगा ।
  • यदि आपको संशोधित करने की आवश्यकता है, $elementतो आपको इसे संदर्भ ( &$element) द्वारा पास करना होगा ।
  • आपके द्वारा आवश्यक अनाम फ़ंक्शन के बाहर से कोई भी चर, आपको निर्माण के $indexOfLastElementअंदर उन्हें useफिर से सूचीबद्ध करना होगा , यदि आवश्यक हो तो संदर्भ द्वारा।

0

आप काउंटर और सरणी लंबाई का उपयोग कर सकते हैं।

    $ सरणी = सरणी (1,2,3,4);

    $ i = 0;
    $ लेन = गिनती ($ सरणी);
    foreach ($ आइटम के रूप में $ सरणी) {
        अगर ($ i === 0) {
            // प्रथम
        } और अगर ($ i === $ लेन - 1) {
            // अंतिम
        }
        //…
        मैं $ ++;
    }


0

का उपयोग करते हुए रीसेट ($ सरणी) और अंत ($ सरणी)

<?php

    $arrays = [1,2,3,4,5];

    $first  = reset($arrays);
    $last   = end($arrays);    

    foreach( $arrays as $array )
    {

        if ( $first == $array )
        {
            echo "<li>{$array} first</li>";
        }
        else if ( $last == $array )
        {
            echo "<li>{$array} last</li>";
        }
        else
        {
            echo "<li>{$array}</li>";
        }                

    }

डेमो उत्तर .it


-2

इसे इस्तेमाल करे:

function children( &$parents, $parent, $selected ){
  if ($parents[$parent]){
    $list = '<ul>';
    $counter = count($parents[$parent]);
    $class = array('first');
    foreach ($parents[$parent] as $child){
      if ($child['id'] == $selected)  $class[] = 'active';
      if (!--$counter) $class[] = 'last';
      $list .= '<li class="' . implode(' ', $class) . '"><div><a href="]?id=' . $child['id'] . '" alt="' . $child['name'] . '">' . $child['name'] . '</a></div></li>';
      $class = array();
      $list .= children($parents, $child['id'], $selected);
    }
    $list .= '</ul>';
    return $list;
  }
}
$output .= children( $parents, 0, $p_industry_id);
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.