2011-09-01 10 views
5

लौटा रहा है यह मुद्दा यह है कि जब मैं $picnameoutput के साथ सरणी बनाने के बाद print_r करता हूं तो यह स्क्रीनशॉट में दिखाई देने वाले सरणी को प्रिंट करता है।मेरा लूप केवल एक मान

बाद में मैं लूप चलाने के बाद और आउटपुट देखने के बाद इसे केवल 1 मान देता हूं और मुझे यह नहीं पता कि यह उस मूल्य को क्यों चुनता है, यह सरणी में पहला भी नहीं है।

बहुत निराश।

यहाँ मेरी कोड

<?php 
    $largedir = 'images/headshots/large'; 
    $large = scandir($largedir); 

    $picnameoutput = preg_grep("/adam.*/", $large); 
    print_r($picnameoutput); 

    for ($i=0; $i<count($picnameoutput); $i++); { 
    echo "$picnameoutput[$i]"; 
    } 
?> 

यहाँ है और एक स्क्रीनशॉट है, तो आप देख सकते हैं कि मैं क्या मतलब

enter image description here

+0

लिखा जा सकता है $ बदलें i <गिनती ($ picnameoutput) द्वारा $ i <= गिनती ($ picnameoutput) सभी मानों के माध्यम से लूप करने के लिए। आपके द्वारा उपयोग किए गए वाक्यविन्यास के कारण आप adam8.jpg प्राप्त कर रहे हैं। – Tom

+2

आपको कभी भी लूप में 'गिनती() 'का उपयोग नहीं करना चाहिए क्योंकि यह प्रत्येक लूप पर निष्पादित किया जाएगा। आपको केवल एक चर के लिए 'count() 'का मान जोड़ना चाहिए और उस लूप में उस चर को जांचना चाहिए। – PeeHaa

उत्तर

29

आप for() ब्रैकेट से पहले के बाद अर्धविराम ; है। इसे हटा दो।

तो

for ($i=0; $i<count($picnameoutput); $i++); { 
echo "$picnameoutput[$i]"; 
} 

हो जाता है

for ($i=0; $i<count($picnameoutput); $i++) { 
    echo "$picnameoutput[$i]"; 
} 

लेकिन मैं foreach() उपयोग करने के लिए सिफारिश करेंगे बजाय

foreach ($picnameoutput as $pic) { 
    echo $pic; 
} 

जो भी तेजी से बहुत उपयोग करना आसान है और यह आपके पाश

के लिए
+0

धन्यवाद कि चाल है, लेकिन अगले अंक पर :) – GrooveChampion

+0

यह बहुत बढ़िया है, अब मेरे पास आपके लिए एक और सवाल है, यह बेहतर क्यों काम करता है? जब मैं सिर्फ "के लिए" उपयोग कर रहा था, तो यह सरणी के पहले 2 मानों को वापस अस्तित्व में नहीं लौटा रहा था, लेकिन प्रत्येक फिक्स्ड के लिए सही है! – GrooveChampion

+0

@GrooveChampion: क्योंकि कुछ इंडेक्स गायब हैं (1 और 2) – genesis

12

आप, for के बाद एक सेमी-कोलन है, इसलिए आपके कोड की तरह क्रियान्वित किया जाता है:

for ($i=0; $i<count($picnameoutput); $i++) { 
    ; // Do nothing 
} 
{ 
    echo "$picnameoutput[$i]"; 
} 

इसके अलावा, यह कम के रूप में

echo implode('', glob('images/headshots/large/adam*')); 
+0

यह मेरे पहले प्रयासों में से एक है, इसने मुझे इसे दूर करने में काफी समय लगाया है ... धन्यवाद, हालांकि मैं सलाह की सराहना करता हूं। – GrooveChampion

+0

@GrooveChampion चिंता न करें, यह एक सामान्य, यहां तक ​​कि पाठ्यपुस्तक गलती है। पहले प्रयासों में से एक के लिए, आपका कोड उल्लेखनीय रूप से अच्छा दिखता है। मेरा एक लाइनर बहुत गंभीर मत लो;)। – phihag

+0

हाँ, मैंने नियमित अभिव्यक्तियों के बारे में जानने के लिए मुझे थोड़ा सा लिया और इसे समझने के लिए बहुत सी सोच ली लेकिन मैं खुद को ऐसा करने के लिए मजबूर करना चाहता था क्योंकि जिन पुस्तकों का मैं उपयोग कर रहा हूं, वे वास्तव में आपको कुछ भी नहीं करते हैं .. मेरे लिए कुछ भी किए बिना इतना सिद्धांत लेना मुश्किल है ... – GrooveChampion

संबंधित मुद्दे