PHP循环一半的数组

时间:2010-07-01 18:09:51

标签: php arrays loops

所以我有一个像这样的数组:

foreach($obj as $element){
//do something
}

但是如果数组包含50个以上的元素(通常是100个),我只想遍历前50个元素,然后打破循环。

9 个答案:

答案 0 :(得分:13)

清洁方式:

$arr50 = array_slice($obj, 0, 50);
foreach($arr50 as $element){
    // $element....
}

正常方式(这仅适用于具有数字索引和asc顺序的数组):

for($i=0; $i<50 && $i<count($obj); $i++){
  $element = $obj[$i];
}

或者,如果您想使用foreach 可以使用计数器:

$counter = 0;
foreach($obj as $element){
  if( $counter == 50) break;
  // my eyes!!! this looks bad!
  $counter++;
}

答案 1 :(得分:10)

循环一半。

for($i=0; $i<count($obj)/2; $i++)
{
  $element = $obj[$i];
  // do something
}

或者如果你想要前50个元素

$c = min(count($obj), 50);
for($i=0; $i<$c; $i++)
{
  $element = $obj[$i];
  // do something
}

答案 2 :(得分:7)

适用于任何数组,不仅适用于那些使用数字键0, 1, ...的人:

$i = 0;
foreach ($obj as $element) {
    // do something
    if (++$i == 50) {
        break;
    }
}

答案 3 :(得分:3)

一个简洁的替代方案是使用SPL iterators中的几个:

$limit = new LimitIterator(new ArrayIterator($obj), 0, 50);
foreach ($limit as $element) {
    // ...
}

已经提到过相同的程序方法,请参阅使用array_slice的答案。

答案 4 :(得分:1)

for ($i = 0, $el = reset($obj); $i < count($obj)/2; $i++, $el = next($obj)) {
    //$el contains the element
}

答案 5 :(得分:1)

保持简单

$filtered = array_slice($array,0,((count($array)/2) < 50 && count($array) > 50 ? 50 : count($array)));
//IF array/2 is les that 50- while the array is greater then 50 then split the array to 50 else use all the values of the array as there less then 50 so it will not devide
foreach($filtered as $key => $row)
{
  // I beliave in a thing called love.
}

这是怎么回事?

array_slice(
  $array, //Input the whole array
  0, //Start at the first index
  (
    count($array)/2 //and cut it down to half
  )
)

答案 6 :(得分:0)

for($i=0; $i < 50; $i++)
{
  // work on $obj[$i];
}

答案 7 :(得分:0)

这是我最明显的方法:

$i = 0;          // Define iterator

while($obj[$i])  // Loop until there are no more
{
 trace($obj[$i]); // Do your action
 $i++;           // Increment iterator
}

答案 8 :(得分:0)

对于数组的一半而言,无论长度如何以及是否具有数字索引,这都适用于所有情况:

$c = intval(count($array)/2);
reset($array);
foreach(range(1, $c) as $num){
    print key($array)." => ".current($array)."\n";
    next($array);
}