2010-01-04 67 views
9

我有一個foreach循環,我需要限制到前10個項目,然後突破它。一個循環運行在php的限制次數

我該怎麼做呢?

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

希望有詳細的解釋。

回答

36

如果你想使用foreach,你可以添加一個額外的變量來控制迭代次數。例如:

$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

它應該是如果($ i == 10)而不是= 10。 – 2010-01-04 08:32:01

+0

你在'$ i = 10'中忘了'='。 – Gumbo 2010-01-04 08:32:02

+1

感謝您的糾正。 – Alex 2010-01-04 08:33:27

2

當你想退出時使用循環計數器和break

$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; 
    } 
} 

在第10次迭代中,循環將在最後退出。

這有幾種變化,你需要選擇的一件事是你是否要執行外部循環條件。考慮:

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

如果您退出該循環的頂部,您將讀取11行。如果你在底部退出,它將會是10.在這兩種情況下,循環體執行了10次,但執行這個額外的功能可能是你想要的,或者它可能不是。

+0

打錯了,應該是'($ i ++> 10)' – 2010-01-04 08:32:10

+0

這將在第一次迭代時破壞'foreach'循環。 – Gumbo 2010-01-04 08:32:55

1

如果您確信稱要保持foreach循環,添加一個計數器:

$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; 
} 

所以每個循環執行時,計數器增加,當它到達10 ,循環被打破。

如果可能的話,您也許可以將foreach循環修改爲for循環。

1

您可以將您的foreach塊之前啓動計數器和對證的循環,並打破如果計數器10像這樣,

$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

您也可以使用LimitIterator

例如

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

您可以簡單地遍歷array_slice($butters->users->user, 0, 10)(前10個元素)。

0

我真的很喜歡VolkerK的回答,但我不明白他爲什麼在創建新的迭代器時最有可能擁有現有的數組。只是想分享我最終這樣做的方式。

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

foreach(new LimitIterator($iterator, 0, 10) as $key => $value) { 
    // do something 
}