6

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

我正在使用此代码:

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

        echo $num;

        $num++;
    }
    ?>

谢谢 :)

4

8 回答 8

17

您可以使用例如array_slice()

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

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

     echo $key.'=>'.$value.'<br>';
}
于 2013-05-24T09:50:28.880 回答
6

不直接用foreach(). 线索在each名字的一部分。它循环遍历所有元素。

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

在执行其余工作之前,您总是可以if()在循环中使用一个子句来检查键值。

但是,如果这对您不可行,无论出于何种原因,我都建议使用 aFilterIterator来实现这一目标。

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
于 2013-05-24T09:53:09.083 回答
2

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

<?php
$num=0;
foreach($temp_row as $key => $value) {
    if( ++$num < 6 )
    {
        continue;
    }
    echo $num;
}
?>
于 2013-05-24T09:49:05.930 回答
2

或使用 for 循环

$num = 1;
for($i=5; $i<= count($temp_row), $i++) {
   echo $num;
   $num++;
}
于 2013-05-24T09:51:14.620 回答
1

试试这个代码:

$new_temp_row = array_slice($temp_row, 5);

foreach($new_temp_row as $key => $value) {
    echo $value;
}
于 2013-05-24T09:51:27.563 回答
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 
}
于 2013-05-24T09:49:09.163 回答
0

我建议您使用 for 外观而不是 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;
}
?>
于 2013-05-24T09:50:28.060 回答
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
}
?>
于 2013-05-24T09:51:44.263 回答