2012-09-24 22 views
5

Tôi muốn lặp từ 1 đến 5. Đó là dễ dàng nếu bạn sử dụng một vòng lặp for:PHP: vòng lặp từ 1 đến 5 khởi đầu bằng 3

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

Nhưng hãy tưởng tượng thay vì bắt đầu bởi $ i = 1 Tôi có một số khởi đầu ngẫu nhiên từ 1 đến 5 và lần này giá trị của nó là 3. Vì vậy, tôi phải bắt đầu lặp từ 3 và chuỗi lặp phải là: 3,4,5,1,2

Tôi đã có số radom , chúng ta hãy nói nó là 3, sau đó tôi cần 3 4 5 1 2 .. nếu nó là 5, tôi sẽ cần 5 1 2 3 4

Làm thế nào tôi có thể làm điều này ??

Cảm ơn rất nhiều!

Trả lời

1

Hãy thử điều này:

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

Bạn cần hai vars để làm những gì bạn muốn. Nếu bạn đặt J = 3, nó sẽ làm 3 4 5 1 2

vui vẻ.

+0

nó in 4 2 và nếu $ j = 3, tôi cần nó để in 3 4 5 1 2 –

+0

Tôi vừa cập nhật câu trả lời của tôi, điều này sẽ làm việc hiện nay. – Weacked

+0

Là $ j = 3; nó in 3 2 đó là nguyên nhân khiến nó bắt đầu bằng 3 nhưng thay vì 1 nó cho thấy 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

được mã hóa cứng, có nghĩa là 3 là số ngẫu nhiên, tải tiếp theo có thể là 4 hoặc 2 hoặc 1 hoặc 5 .. –

5

Bạn muốn bắt đầu tại một điểm ngẫu nhiên nào đó (offset) và sau đó thực hiện một vòng lặp 5:

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

3 là số ngẫu nhiên, tải tiếp theo có thể là 4 hoặc 2 hoặc 1 hoặc 5 –

+0

Điều chỉnh của tôi answer – JvdBerg

+0

chuỗi video của bạn sẽ tạo ra '3, 4, 0, 1, 2'. – zzzzBov

2

Vâng, $i sẽ lặp 1-5 có nghĩa là bạn có thể thực hiện một biến $j đó là tương đương với $i + 2, nhưng tất nhiên nó sẽ dẫn đến việc đếm:

3, 4, 5, 6, 7 

Đó là nơi mà các mô đun toán tử (%) đến, toán tử mô đun cung cấp cho bạn số dư sau khi chia cho số thứ hai:

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

Nếu bạn lặp lại e 1-5 và thêm 2 (3-7), và lấy kết quả mod(5), bạn sẽ nhận được:

phương trình:

$j = ($i + 2) % 5 

3, 4, 0, 1, 2 

này gần với những gì bạn muốn, nhưng không hoàn toàn. Vì vậy, thay vì thêm 2 ban đầu, thêm 1 ban đầu, và một lần nữa sau khi kết quả của mô đun:

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

Mà sẽ cung cấp cho bạn một loạt các 3, 4, 5, 1, 2.

Để sử dụng một ngẫu nhiên bù đắp, chỉ cần đảm bảo rằng đệm ban đầu được chọn ngẫu nhiên trong một bộ 5 số nguyên dương liên tiếp:

//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

Một số (tốt hơn so với trước đây của tôi) bước-by-step dụ:

Trước hết, bạn muốn có 5 số, đó là lý do bạn thực hiện vòng lặp.Điều đó có thể được viết dưới dạng bộ đếm từ 0 đến 4:

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

Sau đó, bạn chỉ định giá trị bắt đầu của mình. Nếu bạn đặt nó vào một biến và tăng nó cùng với các biến truy cập, điều này cho phép bạn đếm 1-5:

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

Đây $i là quầy thu ngân và $j chứa giá trị mà bạn đang tìm kiếm.

Như ví dụ này cho thấy, logic để xác định số bước cần làm đã được tách ra khỏi việc tăng biến vòng lặp.

Bây giờ, bạn cần phải thêm séc nếu $j cao hơn 5 và nếu nó được đặt lại thành 1. Tuy nhiên, cách tốt nhất để làm điều đó là sử dụng toán tử modulo. Điều đó có nghĩa, trước khi tăng $j, nó sẽ được thiết lập để phần còn lại của bản thân chia cho 5. Đó là phép toán module, % điều hành trong PHP:

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

Và bây giờ bạn đã có for vòng lặp của bạn được tạo giá trị.

Trong ví dụ này, bạn có thể thay thế số 3 bằng số bắt đầu ngẫu nhiên của mình. Hãy cẩn thận rằng nó lớn hơn 0 và thấp hơn 6, nếu không ít nhất là lần lặp đầu tiên sẽ cho bạn một số sai.

Như bạn có thể hình dung có nhiều cách để làm điều đó, vì vậy đây chỉ là một ví dụ.

Các vấn đề liên quan