2012-09-24 31 views
5

मैं आसान है कि 5. तक 1 से लूप करना चाहते हैं 1 से 5 प्रारंभिक तक पाशन अगर आप पाश के लिए एक का उपयोग करें:पीएचपी: द्वारा 3

for ($i=1; $i<=5; $i++) 
{ 
// do something 
} 

लेकिन बजाय $ i = 1 मैं द्वारा शुरू करने की कल्पना 1 से 5 तक एक यादृच्छिक प्रारंभ संख्या और इस बार इसका मान 3 है। इसलिए मुझे 3 से लूपिंग शुरू करना है और लूप अनुक्रम होना चाहिए: 3,4,5,1,2

मेरे पास पहले से ही रेडॉम नंबर है , मान लें कि यह 3 है, तो मुझे 3 4 5 1 2 की आवश्यकता है .. अगर यह 5 वर्ष का था, तो मुझे 5 1 2 3 4

मैं यह कैसे कर सकता हूं ??

बहुत बहुत धन्यवाद!

उत्तर

1

आज़माएं:

for ($i = 0, $j = 3; $i < 5; $i++) 
{ 
    echo $j; 
    $j %= 5; 
    $j++; 
} 

आप करने के लिए दो वार्स की जरूरत है तुम्हें जो करना है करो। यदि आप जे = 3 सेट करते हैं, तो यह 3 4 5 1 2

मज़ेदार होगा।

+0

यह 4 2 प्रिंट और अगर $ j = 3, मैं इसे की जरूरत है 3 4 5 1 2 –

+0

मुद्रित करने के लिए मैं बस अपना जवाब अद्यतन, इस काम करना चाहिए अभी व। – Weacked

+0

$ j = 3 होने के नाते; यह प्रिंट करता है 3 2 जो कि 3 से शुरू होता है, यह बहुत अच्छा कारण है, लेकिन 1 के बजाय यह दिखाता है कि 6 –

0
$i = array(3,4,5,1,2); //considering you want to follow this order, and not random. 
foreach($i as $v) { 
//do something 
} 
+0

जो हार्डकोडेड है, मेरा मतलब है कि 3 एक यादृच्छिक संख्या है, अगला लोड यह 4 या 2 या 1 या 5 हो सकता है .. –

5

आप एक निश्चित यादृच्छिक बिंदु (ऑफसेट) में शुरू हुई और फिर 5 का एक पाश बनाना चाहते:

$offset = rand(1,5); 
for ($i=1; $i<=5; $i++) 
{ 
    echo (($i + $offset) % 5) + 1; 
} 
+0

3 एक यादृच्छिक संख्या है, अगला लोड यह 4 या 2 या 1 या 5 –

+0

समायोजित किया जा सकता है उत्तर – JvdBerg

+0

आपकी श्रृंखला '3, 4, 0, 1, 2' का उत्पादन करेगी। – zzzzBov

2

खैर, $i5 को 1 से पुनरावृति जाएगा जिसका मतलब है कि आप किसी दूसरे चर $j कि $i + 2 के बराबर है बना सकते हैं, लेकिन निश्चित रूप से यह की गिनती में परिणाम होगा:

3, 4, 5, 6, 7 

कौन सा जहां मापांक है ऑपरेटर (%) में आता है, मापांक ऑपरेटर आप दूसरी संख्या से विभाजन के बाद शेष देता है:

3 % 5 //3 
7 % 5 //2 

आप iterat हैं ई 1 से 5 और करने के लिए जोड़ 2 (3-7), और परिणाम mod(5) लेते हैं, आप प्राप्त करेंगे:

समीकरण:

$j = ($i + 2) % 5 

3, 4, 0, 1, 2 

यह आप क्या चाहते हैं के करीब है, लेकिन काफी नहीं। तो बजाय शुरू में 2 जोड़ने की, 1 शुरू में जोड़ने के लिए, और मापांक का परिणाम के बाद फिर से:

$j = $i; 
$j += 1; 
$j %= 5; 
$j += 1; 
//or in one line: 
$j = (($i + 1) % 5) + 1; 

जो तुम 3, 4, 5, 1, 2 की एक श्रृंखला दे देंगे।

उपयोग करने के लिए एक यादृच्छिक ऑफसेट, बस यह सुनिश्चित करें कि प्रारंभिक गद्दी 5 लगातार धनात्मक पूर्णांक का एक सेट में बेतरतीबी बनाना:

//this could be rand(0, 4) or rand(101, 105) 
//it doesn't actually matter which range of 5 integers 
//as the modulus operator will bound the results to the range of 0-4 
$offset = rand(1, 5); 
for ($i = 1; $i <= 5; $i++) { 
    $j = (($i + $offset) % 5) + 1; 
} 
1

कुछ (बेहतर मेरे पिछले की तुलना में) चरण-दर-चरण उदाहरण:

सबसे पहले आप 5 नंबर चाहते हैं, यही कारण है कि आप लूप करते हैं।इसे 0 से 4:

for ($i = 0; $i < 5; $i++) { ... 

पर काउंटर के रूप में लिखा जा सकता है, फिर आप अपना प्रारंभ मूल्य निर्दिष्ट करते हैं। आप इसे एक चर में डाल दिया है और यह एक साथ वृद्धि काउंटर चर के साथ, तो यह आपके 1 से 5 गिनती करने के लिए अनुमति देता है:

for ($i = 0, $j = 1; $i < 5; $i++, $j++) { ... 
      ^^^^^^    ^^^^ 

यहाँ $i काउंटर है और $j मूल्य आप देख रहे हैं शामिल हैं।

जैसा कि यह उदाहरण दिखाता है, करने के लिए चरणों को निर्धारित करने के लिए तर्क लूप चर को बढ़ाने से अलग किया गया है।

अब $j 5 से अधिक हो जाता है, तो आपको एक चेक जोड़ने की आवश्यकता है, और यदि ऐसा होता है तो इसे 1 पर रीसेट किया जाना चाहिए। हालांकि, ऐसा करने का एक अच्छा तरीका मॉड्यूल ऑपरेटर का उपयोग करना है।

for ($i = 0, $j = 3; $i < 5; $i++, $j %= 5, $j++) { ... 
            ^^^^^^^ 

और अपने for पाश अब तुम मिल गया है कि पैदा कर रही है: इसका मतलब है कि बढ़ती $j से पहले, यह अपने आप के शेष 5. से विभाजित सापेक्ष आपरेशन, % PHP में ऑपरेटर है कि करने के लिए स्थापित किया जाएगा महत्व।

इस उदाहरण में आप को अपने यादृच्छिक प्रारंभ संख्या के साथ प्रतिस्थापित कर सकते हैं। ध्यान रखें कि यह 0 से बड़ा है और 6 से कम है, अन्यथा कम से कम पहला पुनरावृत्ति आपको गलत नंबर देगा।

जैसा कि आप कल्पना कर सकते हैं कि ऐसा करने के कई तरीके हैं, इसलिए यह केवल एक उदाहरण है।