कैसे करें फॉर्च्यूनर इंडेक्स?


489

क्या foreachसूचकांक को खोजना संभव है ?

एक forलूप में निम्नानुसार है:

for ($i = 0; $i < 10; ++$i) {
   echo $i . ' ';
}

$i आपको सूचकांक देगा।

क्या मुझे forलूप का उपयोग करना है या लूप में इंडेक्स प्राप्त करने का कोई तरीका है foreach?

जवाबों:


908
foreach($array as $key=>$value) {
    // do stuff
}

$keyप्रत्येक $arrayतत्व का सूचकांक है


2
सूचकांक द्वारा ओपी का क्या अर्थ है: इस पर निर्भर करता है <? $ a = सरणी (3,5, 'xx', 4312, 'sasas'); सेट नहीं ($ एक [3]); foreach ($ a as $ k => $ v) "\ $ k = $ k और \ $ v = $ v" प्रिंट करें; ?>
मिलीन ए। राडव

9
निश्चित रूप से, यह सवाल बहुत विशिष्ट नहीं है, मुझे इसका मतलब यह लगा कि ओपी मोटे तौर पर $ कुंजी => $ मूल्य सिंटैक्स से अनजान था
ओवेन

38
अच्छी तरह से यह वास्तव में सही है, लेकिन स्वीकृत उत्तर नहीं होना चाहिए, क्योंकि कुंजी एक स्ट्रिंग भी हो सकती है। कहते हैं कि आप $myarr['foo'] = 'bar';इस विधि को विफल करते हैं
Toskan

12
@ आप इस अर्थ में सही हैं कि यह विफल नहीं है। लेकिन यह ओपी प्रश्न का पालन करने में विफल रहता है। वह एन-वें तत्व जैसे संख्यात्मक मूल्यों की तलाश कर रहा है।
तोस्कान

3
जैसे @ ट्सकान कहती है, यह स्वीकृत उत्तर नहीं होना चाहिए। मुझे लगता है कि लूप के बाहर एक वैरिएबल बनाना बेहतर है और वहां से गिनती, vatiable++;प्रत्येक पुनरावृत्ति पर इसे बढ़ाते हुए । पारंपरिक तरीका है, लेकिन हमेशा काम किया है।
जोमर सेविजो

172

आप अपने में एक हैक लगा सकते हैं foreach, जैसे कि प्रत्येक रन-थ्रू पर बढ़ाई गई फ़ील्ड, जो कि वास्तव में forलूप आपको संख्यात्मक रूप से अनुक्रमित सरणी में देता है। ऐसा क्षेत्र एक छद्म सूचकांक होगा जिसमें मैनुअल प्रबंधन (वेतन वृद्धि आदि) की आवश्यकता होती है।

A foreachआपके $keyमूल्य के रूप में आपको अपना सूचकांक देगा , इसलिए ऐसी हैक आवश्यक नहीं होनी चाहिए।

जैसे, ए foreach

$index = 0;
foreach($data as $key=>$val) {
    // Use $key as an index, or...

    // ... manage the index this way..
    echo "Index is $index\n";
    $index++;
}

127
एक लूप में बढ़ा हुआ मूल्य शायद ही 'हैक' है।
थॉमस मैककेब

17
@ThomasMcCabe कोई यह भी कह सकता है कि यह लूप के लिए मुख्य उपयोगों में से एक है।
बाइसन

26

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


यदि आप डेटा को संग्रहीत करने के लिए एक पुराने पुराने PHP साहचर्य सरणी का उपयोग करना चाहते हैं, जो Iterable इंटरफ़ेस (जहाँ आपको लूप में है, जहाँ आपको ट्रैक करने की आवश्यकता है) पर नज़र रखने के लिए यह उपयोगी होना चाहिए।
पीटर

2
वैकल्पिक, लेकिन हर यात्रा में एक समारोह कॉल के लिए +1 एक छोटे से पहले ही असाइन चर (यानी का उपयोग कर का उपयोग कर से भारी होता है $keyसे $key=>$valueहालांकि, मुझे यकीन है कम प्रदर्शन गैर महत्वपूर्ण / एक सरल पाश में प्रत्याक्ष है) ...।
आर्मफूट

20

ओवेन के पास एक अच्छा जवाब है। यदि आप केवल कुंजी चाहते हैं, और आप एक सरणी के साथ काम कर रहे हैं तो यह भी उपयोगी हो सकता है।

foreach(array_keys($array) as $key) {
//  do stuff
}

4
और अगर आप सूचकांक की जरूरत है, foreach(array_keys($array) as $index=>$key)
सिंह

14

आप $iलूप के बाहर बना सकते हैं और लूप $i++के नीचे कर सकते हैं ।


16
यह ध्यान रखना महत्वपूर्ण है कि यह दृष्टिकोण लूप की वर्तमान पुनरावृत्ति देता है, पुनरावृत्त सरणी का वर्तमान सूचकांक नहीं।
पीटर बैली

8

ये दो लूप समतुल्य हैं (बार की सुरक्षा रेलिंग)

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

foreach ($things as $i=>$thing) { ... }

जैसे

for ($i=0; $i<count($things); $i++) {
    echo "Thing ".$i." is ".$things[$i];
}

foreach ($things as $i=>$thing) {
    echo "Thing ".$i." is ".$thing;
}

17
नहीं अगर यह एक सहयोगी सरणी है
जोकोर्टोपासि


5

जोनाथन सही है। PHP सारणी मानों के लिए मानचित्र मानचित्रण कुंजी के रूप में कार्य करती है। कुछ मामलों में आप एक सूचकांक प्राप्त कर सकते हैं यदि आपकी सरणी परिभाषित की गई है, जैसे

$var = array(2,5);

for ($i = 0; $i < count($var); $i++) {
    echo $var[$i]."\n";
}

आपका आउटपुट होगा

2
5

जिस स्थिति में सरणी में प्रत्येक तत्व को एक पता योग्य सूचकांक है, लेकिन यदि आप तब कुछ ऐसा करते हैं, तो निम्नलिखित हैं

$var = array_push($var,10);

for ($i = 0; $i < count($var); $i++) {
    echo $var[$i]."\n";
}

आपको कोई आउटपुट नहीं मिलता है ऐसा इसलिए होता है क्योंकि PHP में सरणियाँ रेखीय संरचनाएं नहीं होती हैं जैसे वे अधिकांश भाषाओं में होती हैं। वे हैश टेबल की तरह अधिक हैं जो सभी संग्रहीत मूल्यों के लिए कुंजी हो सकते हैं या नहीं हो सकते हैं। इसलिए फॉर्च्यूनर उन पर क्रॉल करने के लिए इंडेक्स का उपयोग नहीं करता है क्योंकि उनके पास केवल एक इंडेक्स होता है यदि एरे को परिभाषित किया जाता है। यदि आपको एक इंडेक्स की आवश्यकता है, तो सुनिश्चित करें कि आपके एरे को उन पर रेंगने से पहले पूरी तरह से परिभाषित किया गया है, और लूप के लिए उपयोग करें।


हाँ, यही कारण है कि PHP में हमें चाबियाँ द्वारा "सरणियों में शामिल होना चाहिए" और अनुक्रमित द्वारा नहीं ... यह भी देखें array_map (func, $ a, $ b)।
पीटर क्रूस

Ops, प्रिय पाठक और @ TheBrawnyMan, यह भी याद रखें कि आपका उदाहरण array_push () बग (!) जैसा है । पुनर्संयोजन का उपयोग करना है $var[] = 10;(गाइड के लिए PHP लिंक देखें), इसलिए दूसरा forलूप अपेक्षित परिणामों को आउटपुट करता है।
पीटर क्रूस

4

PHP सरणियों में आंतरिक बिंदु होते हैं, इसलिए यह प्रयास करें:

foreach($array as $key => $value){
   $index = current($array);
}

मेरे लिए ठीक काम करता है (हालांकि बहुत पहले से परीक्षण किया गया है)।


1

जब मैं साहचर्य सरणियों के साथ काम करता हूं, तो मैं आमतौर पर ऐसा करता हूं:

foreach ($assoc_array as $key => $value) {
 //do something
}

यह गैर-सहयोगी सरणियों के साथ भी ठीक काम करेगा। $ कुंजी इंडेक्स वैल्यू होगी। यदि आप चाहें, तो आप यह भी कर सकते हैं:

foreach ($array as $indx => $value) {
  //do something
}

4
इसके लिए 'विकल्प' क्या है? तुम्हें पता है कि यह वही है, चर नामों के अलावा? तो अंतिम वाक्य और कोड ब्लॉक अनावश्यक है, मैं कहूंगा - अगर यह कुछ भी करता है तो यह भ्रमित करता है ..
डेनिस 98

@ डेनिस98 अंतर यह है कि उनमें से एक में इनपुट के रूप में एक सहयोगी सरणी है और दूसरे में एक संख्यात्मक सरणी है। हालांकि मुझे लगता है कि यह बेहतर होता अगर जवाब थोड़ा और अधिक होता।
I_ATE_YOUR_WORK_FILES

0

मैं इसे जोड़ना चाहूंगा, मैंने लारवल में इसका उपयोग सिर्फ अपनी तालिका को अनुक्रमित करने के लिए किया:

  • $ लूप के साथ-> सूचकांक
  • मैं इसे 1 पर शुरू करने के लिए ++ $ लूप के साथ भी पुनर्जन्म लेता हूं

मेरा कोड:

@foreach($resultsPerCountry->first()->studies as $result)
  <tr>
    <td>{{ ++$loop->index}}</td>                                    
  </tr>
@endforeach

यह सवाल लार्वा के लिए नहीं पूछा गया था। $loopचर का इस्तेमाल किया है क्योंकि यह सामान्य PHP के लिए कहा जाता है नहीं हो सकता।
Özgür Can Karagöz

0

मैंने इस तरह से हल किया, जब मुझे एक ही संदर्भ में फॉरेक्स इंडेक्स और मूल्य का उपयोग करना पड़ा:

$array = array('a', 'b', 'c');
foreach ($array as $letter=>$index) {

  echo $letter; //Here $letter content is the actual index
  echo $array[$letter]; // echoes the array value

}//foreach

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.