2009-07-23 42 views
21

có thể thực hiện việc này không? (Đây là mã của tôi)Php cho vòng lặp có 2 biến?

for ($i = 0 ; $i <= 10 ; $i++){ 
    for ($j = 10 ; $j >= 0 ; $j--){ 
    echo "Var " . $i . " is " . $k . "<br>"; 
    } 
} 

Tôi muốn một cái gì đó như thế này:

var 0 là 10

var 1 là 9

var 2 là 8 ...

Nhưng mã của tôi là sai, nó đưa ra một danh sách rất lớn. Php guru, giúp tôi !!

Trả lời

51

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

for ($i=0, $k=10; $i<=10 ; $i++, $k--) { 
    echo "Var " . $i . " is " . $k . "<br>"; 
} 

Hai biến $i$k được khởi tạo với 010 tương ứng. Vào cuối mỗi vòng lặp, $i sẽ được tăng thêm một ($i++) và $k bị giảm một ($k--). Vì vậy, $i sẽ có các giá trị 0, 1,…, 10 và $k các giá trị 10, 9,…, 0.

+6

+1 - thậm chí không biết bạn có thể làm điều này! –

+0

Ồ wow. Tôi không có ý tưởng bạn đặt nhiều vars trong vòng một vòng lặp. Tốt đẹp. – Sampson

+0

Cho cú pháp của vòng lặp for nghĩa là gì, nó có ý nghĩa ... –

1

Bạn không nên sử dụng hai vòng lặp cho những gì bạn muốn đạt được khi bạn ' lặp lại tổng cộng 121 lần (11x11). Những gì bạn thực sự muốn chỉ là có một bộ đếm được khai báo bên ngoài vòng lặp theo dõi j, và sau đó giảm j bên trong vòng lặp.

Chỉnh sửa: Cảm ơn Gumbo vì đã thu hút sự chú ý của tôi.

+0

Trên thực tế đó là 11 · 11 = 121 (từ 0 đến 10 bao gồm). – Gumbo

+0

Ah, vâng, thậm chí không thấy điều đó. – AlbertoPL

0

Để mở rộng các câu trả lời (chính xác) khác, những gì bạn đang làm được gọi là lồng các vòng. Điều này có nghĩa là đối với mỗi lần lặp của vòng lặp ngoài (vòng đầu tiên), bạn đã hoàn thành toàn bộ vòng lặp bên trong. Điều này có nghĩa rằng thay vì 11 kết quả đầu ra, bạn sẽ có được 11 + 11 + 11 + ... = 11 * 11 đầu ra

1

Nếu, như mã của bạn trông như thế nào, bạn có hai giá trị chạy theo hướng ngược lại bạn có thể chỉ đơn giản là trừ đi:

echo "Var " . $i . " is " . 10 - $i . "<br>"; 

Nhưng tôi đoán đó là không thực sự bạn muốn gì? Ngoài ra, hãy cẩn thận với đề xuất comma operator. Trong khi nó là một điều tốt đẹp nó có thể gây ra tác dụng phụ nghịch ngợm trong các ngôn ngữ khác như C and C++ như PHP thực hiện nó một cách khác nhau.

0
array_map(function($i) { 
    echo "Var {$i} is ".(10-$i)."<br/>".PHP_EOL; 
}, range(1,10)); 
1

Bạn cũng có thể thêm một điều kiện cho phần thứ hai biến

for ($i=0, $k=10; $i<=10, $k>=0 ; $i++, $k--) { 
    echo "Var " . $i . " is " . $k . "<br>"; 
} 
0

tôi đã cố gắng để có được một sự khởi đầu và kết thúc thời gian và lưu trữ trong cơ sở dữ liệu, được đưa ra một sự khởi đầu và kết thúc thời gian, bạn lặp qua mỗi thời gian sử dụng hai biến i & j

$start = "09:00"; 
    $end = "18:00"; 
    $strEnTim = strtotime("10.00"); 

    $slotStart = strtotime($start); 
    $slotEnd = strtotime($end); 
    $slotNow = $slotStart; 

    for($i=$slotStart, $j=$strEnTim; $i, $j<=$slotEnd; $i+=3600, $j+=3600) 
    { 
     if(($i < $slotNow) && ($j < $strEnTim)) continue; 
     Slot::create([ 
      'start_time' => date("H:i",$i), 
      'end_time' => date("H:i", $j) 
     ]); 
    } 
Các vấn đề liên quan