PHP:如何做foreach并从集合的第六个元素开始?

时间:2013-05-24 09:46:50

标签: php loops foreach

是否可以从特定元素[第六元素]开始一个foreach循环?

我正在使用此代码:

    <?php
    $num=1;
    foreach($temp_row as $key => $value) {

        echo $num;

        $num++;
    }
    ?>

谢谢:)

8 个答案:

答案 0 :(得分:16)

您可以使用例如array_slice()

$num = 5; //it will start from sixth element

foreach(array_slice($temp_row, $num) as $key => $value) {

     echo $key.'=>'.$value.'<br>';
}

答案 1 :(得分:6)

不直接使用foreach()。线索在名称的each部分。它遍历所有元素。

那么我们怎样才能实现呢?

在循环中你总是可以有一个if()子句来检查键值,然后再做其余的工作。

但是,如果这对你不适用,无论出于何种原因,我建议使用FilterIterator来实现这一点。

FilterIterator是一个标准的PHP类,您可以扩展它以创建自己的过滤器。然后可以使用标准foreach()循环循环迭代器,仅拾取过滤器接受的记录。

上面链接的手册页上有一些例子会有所帮助,但这里有一个快速的例子我已经为你拼凑了一起:

class SkipTopFilter extends FilterIterator {
    private $filterNum = 0;
    public function __construct(array $array, $filter) {
        parent::__construct(new ArrayIterator($array));
        $this->filterNum = $filter;
    }
    public function accept() {
        return ($this->getInnerIterator()->key() >= $this->filterNum);
    }
}

$myArray = array(13,6,8,3,22,88,12,656,78,188,99);
foreach(new SkipTopFilter($myArray, 6) as $key=>$value) {
    //loop through all records except top six.
    print "rec: $key => $value<br />";
}

测试;输出:

rec: 6 => 12
rec: 7 => 656
rec: 8 => 78
rec: 9 => 188
rec: 10 => 99

答案 2 :(得分:2)

如果计数器不是第6个元素,你可以跳过...

<?php
$num=0;
foreach($temp_row as $key => $value) {
    if( ++$num < 6 )
    {
        continue;
    }
    echo $num;
}
?>

答案 3 :(得分:2)

或使用for循环

$num = 1;
for($i=5; $i<= count($temp_row), $i++) {
   echo $num;
   $num++;
}

答案 4 :(得分:1)

试试这段代码:

$new_temp_row = array_slice($temp_row, 5);

foreach($new_temp_row as $key => $value) {
    echo $value;
}

答案 5 :(得分:0)

$i = 1;
foreach ($temp_row as $key => $value) {
    if (($num = $i++) < 6) continue;
    // Do something
}

或者

for ($i = 0; $i < 5; $i++) next($temp_row);
while(list($key, $value) = each($temp_row)) {
    // Do something 
}

答案 6 :(得分:0)

我建议您使用for for look而不是a。然后,您可以访问循环中i位置的键和值。

<?php
$num = 1;
$keys = array_keys( $temp_row );
for( $i = 5; $i < count( $temp_row ); $i++ ) {
            $key = $keys[$i];
            $val = $temp_row[$i];
    echo $i;
}
?>

答案 7 :(得分:0)

您可以使用原始数组的所需数据部分创建新数组并使用它:

$process = array_slice ($temp_row, 5);
foreach($process as $key => $value) {

    //TODO Your logic
}

或者你可以跳过第一个siel元素:

<?php
$num=1;
foreach($temp_row as $key => $value) {
    if ($num < 6) {
         $num++;
         continue;
    }
    //TODO Your logic
}
?>