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


PHP: how to do foreach and start from sixth element of collection?

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

im使用此代码:

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

谢谢:(

例如,您可以使用array_slice((

$num = 5; //it will start from sixth element
foreach(array_slice($temp_row, $num) as $key => $value) {
     echo $key.'=>'.$value.'<br>';
}

不直接使用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

如果计数器不是第六个元素,则可以跳过。。。

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

或带有for循环

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

试试这个代码:

$new_temp_row = array_slice($temp_row, 5);
foreach($new_temp_row as $key => $value) {
    echo $value;
}

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

$process = array_slice ($temp_row, 5);
foreach($process as $key => $value) {
    //TODO Your logic
}

或者你可以跳过第一层:

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

我建议您使用for look,而不是for each。然后,您可以访问循环中位于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;
}
?>
$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 
}