जवाबों:
foreach($array as $key=>$value) {
// do stuff
}
$key
प्रत्येक $array
तत्व का सूचकांक है
$myarr['foo'] = 'bar';
इस विधि को विफल करते हैं
vatiable++;
प्रत्येक पुनरावृत्ति पर इसे बढ़ाते हुए । पारंपरिक तरीका है, लेकिन हमेशा काम किया है।
आप अपने में एक हैक लगा सकते हैं 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++;
}
यह ध्यान दिया जाना चाहिए कि आप key()
मौजूदा कुंजी को खोजने के लिए किसी भी सरणी पर कॉल कर सकते हैं । जैसा कि आप अनुमान लगा सकते हैं कि current()
वर्तमान मूल्य वापस आ जाएगा और next()
सरणी के पॉइंटर को अगले तत्व में ले जाएगा।
$key
से $key=>$value
हालांकि, मुझे यकीन है कम प्रदर्शन गैर महत्वपूर्ण / एक सरल पाश में प्रत्याक्ष है) ...।
आप $i
लूप के बाहर बना सकते हैं और लूप $i++
के नीचे कर सकते हैं ।
ये दो लूप समतुल्य हैं (बार की सुरक्षा रेलिंग)
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;
}
मुझे लगता है कि सबसे अच्छा विकल्प समान है:
foreach ($lists as $key=>$value) {
echo $key+1;
}
यह आसान और सामान्य रूप से है
जोनाथन सही है। 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 में सरणियाँ रेखीय संरचनाएं नहीं होती हैं जैसे वे अधिकांश भाषाओं में होती हैं। वे हैश टेबल की तरह अधिक हैं जो सभी संग्रहीत मूल्यों के लिए कुंजी हो सकते हैं या नहीं हो सकते हैं। इसलिए फॉर्च्यूनर उन पर क्रॉल करने के लिए इंडेक्स का उपयोग नहीं करता है क्योंकि उनके पास केवल एक इंडेक्स होता है यदि एरे को परिभाषित किया जाता है। यदि आपको एक इंडेक्स की आवश्यकता है, तो सुनिश्चित करें कि आपके एरे को उन पर रेंगने से पहले पूरी तरह से परिभाषित किया गया है, और लूप के लिए उपयोग करें।
$var[] = 10;
(गाइड के लिए PHP लिंक देखें), इसलिए दूसरा for
लूप अपेक्षित परिणामों को आउटपुट करता है।
जब मैं साहचर्य सरणियों के साथ काम करता हूं, तो मैं आमतौर पर ऐसा करता हूं:
foreach ($assoc_array as $key => $value) {
//do something
}
यह गैर-सहयोगी सरणियों के साथ भी ठीक काम करेगा। $ कुंजी इंडेक्स वैल्यू होगी। यदि आप चाहें, तो आप यह भी कर सकते हैं:
foreach ($array as $indx => $value) {
//do something
}
मैं इसे जोड़ना चाहूंगा, मैंने लारवल में इसका उपयोग सिर्फ अपनी तालिका को अनुक्रमित करने के लिए किया:
मेरा कोड:
@foreach($resultsPerCountry->first()->studies as $result)
<tr>
<td>{{ ++$loop->index}}</td>
</tr>
@endforeach
$loop
चर का इस्तेमाल किया है क्योंकि यह सामान्य PHP के लिए कहा जाता है नहीं हो सकता।
मैंने इस तरह से हल किया, जब मुझे एक ही संदर्भ में फॉरेक्स इंडेक्स और मूल्य का उपयोग करना पड़ा:
$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
foreach(array_keys($array) as $key) {
// do stuff
}