Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/244.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP:如何进行foreach并从集合的第六个元素开始?_Php_Loops_Foreach - Fatal编程技术网

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

PHP:如何进行foreach并从集合的第六个元素开始?,php,loops,foreach,Php,Loops,Foreach,是否可以从特定元素[第六个元素]开始foreach循环 我正在使用这个代码: <?php $num=1; foreach($temp_row as $key => $value) { echo $num; $num++; } ?> $new_temp_row = array_slice($temp_row, 5); foreach($new_temp_row as $key => $value

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

我正在使用这个代码:

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

        echo $num;

        $num++;
    }
    ?>
$new_temp_row = array_slice($temp_row, 5);

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


谢谢:)

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

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

$i=1;
foreach($key=>$value的临时行){
如果($num=$i++)<6)继续;
//做点什么
}

用于($i=0;$i<5;$i++)下一个($temp_行);
while(列表($key,$value)=每个($temp_行)){
//做点什么
}

我建议您使用for look,而不是a 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;
}
?>

例如,您可以使用

$num=5//它将从第六元素开始
foreach(数组\u切片($temp\u row,$num)作为$key=>$value){
回显$key.'=>'.$value.'
'; }
或带有for循环

$num = 1;
for($i=5; $i<= count($temp_row), $i++) {
   echo $num;
   $num++;
}
$num=1;
对于($i=5;$i请尝试以下代码:

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

        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
}
或者您可以跳过第一个siel elments:

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

不直接使用
foreach()
。线索在名称的
每个部分。它在所有元素中循环

那么,我们如何才能实现这一目标呢

您可以在循环中始终有一个
if()
子句,在执行其余工作之前检查键值

但是,如果这对你来说不可行,无论出于什么原因,我建议使用一种方法来实现这一点

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 />";
}

只是…删除你的第二个建议。如果他不得不跳过100000个元素呢?最好在for循环之外计算计数($temp_行),它可以在for循环内部,
for($i=5,$cnt=count($temp_行)$这不是一个绝妙的解决方案…如果有成千上万的项目要跳过呢?是的-如果你跳过更多的项目,但小的设置不是最好的,这不会是一件痛苦的事。总是与这种事情进行权衡。
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