2010-01-04 43 views
9

Tôi có vòng lặp foreach mà tôi cần giới hạn trong 10 mục đầu tiên sau đó thoát ra khỏi nó.giới hạn số lần vòng lặp chạy trong php

Tôi làm như thế nào ở đây?

foreach ($butters->users->user as $user) { 
    $id = $user->id; 
    $name = $user->screen_name; 
    $profimg = $user->profile_image_url; 
    echo "things";  
} 

Cũng sẽ đánh giá cao giải thích chi tiết.

Trả lời

36

Nếu bạn muốn sử dụng foreach, bạn có thể thêm một biến bổ sung để kiểm soát số lần lặp lại. Ví dụ:

$i=0; 
foreach ($butters->users->user as $user) { 
    if($i==10) break; 
    $id = $user->id; 
    $name = $user->screen_name; 
    $profimg = $user->profile_image_url; 
    echo "things"; 
    $i++; 
} 
+2

Sẽ là nếu ($ i == 10) và không = 10. –

+0

Bạn đã quên '=' trong '$ i = 10'. – Gumbo

+1

Cảm ơn bạn đã sửa. – Alex

2

Sử dụng bộ đếm vòng lặp và break khi bạn muốn thoát.

$i = 0; 
foreach ($butters->users->user as $user) { 
    $id = $user->id; 
    $name = $user->screen_name; 
    $profimg = $user->profile_image_url; 
    echo "things";  
    if (++$i >= 10) { 
    break; 
    } 
} 

Trên vòng lặp thứ 10 vòng lặp sẽ thoát ở cuối.

Có một số biến thể của điều này và một điều bạn cần phải chọn là bạn có muốn thực thi điều kiện vòng lặp bên ngoài hay không. Hãy xem xét:

foreach (read_from_db() as $row) { 
    ... 
} 

Nếu bạn thoát ở đầu vòng lặp đó, bạn sẽ đọc 11 hàng. Nếu bạn thoát ra ở phía dưới, nó sẽ là 10. Trong cả hai trường hợp, thân vòng lặp đã thực thi 10 lần nhưng thực thi hàm phụ đó có thể là những gì bạn muốn hoặc nó có thể không.

+0

typo ở đó, phải là '($ i ++> 10)' –

+0

Điều này sẽ phá vỡ vòng lặp 'foreach' với lần lặp đầu tiên. – Gumbo

1

Nếu bạn chắc chắn về việc muốn giữ foreach vòng lặp, thêm một bộ đếm:

$count = 0; 
foreach ($butters->users->user as $user) { 
    $id = $user->id; 
    $name = $user->screen_name; 
    $profimg = $user->profile_image_url; 
    echo "things";  

    $count++; 
    if ($count == 10) 
     break; 
} 

vì vậy mỗi lần vòng lặp của bạn thực hiện, bộ đếm được tăng lên và khi nó đạt đến 10 , vòng lặp bị hỏng.

Hoặc bạn có thể làm lại vòng lặp foreach thành vòng lặp for, nếu có thể.

1

bạn có thể bắt đầu một bộ đếm trước khi khối foreach bạn và kiểm tra chống lại nó trong vòng lặp và phá vỡ nếu bộ đếm là 10 như vậy,

$count = 1; 
foreach ($butters->users->user as $user) { 
    if($count == 10) 
     break; 
    $id = $user->id; 
    $name = $user->screen_name; 
    $profimg = $user->profile_image_url; 
    echo "things"; 
    $count++; 
} 
15

Bạn cũng có thể sử dụng LimitIterator.

ví dụ:

$users = new ArrayIterator(range(1, 100)); // 100 test records 
foreach(new LimitIterator($users, 0, 10) as $u) { 
    echo $u, "\n"; 
} 
3

Bạn chỉ cần lặp lại qua array_slice($butters->users->user, 0, 10) (10 yếu tố đầu tiên).

0

Tôi thực sự thích câu trả lời của VolkerK, nhưng tôi không hiểu tại sao anh ta lại tạo một trình lặp mới khi có nhiều khả năng bạn sẽ có một mảng hiện có. Chỉ muốn chia sẻ cách tôi đã làm nó.

$arrayobject = new ArrayObject($existingArray); 
$iterator = $arrayobject->getIterator(); 

foreach(new LimitIterator($iterator, 0, 10) as $key => $value) { 
    // do something 
} 
Các vấn đề liên quan