代码之家  ›  专栏  ›  技术社区  ›  yretuta

在foreach循环中运行的PHP迭代器中访问next()和rewind()的值

  •  0
  • yretuta  · 技术社区  · 15 年前

    这些方法都被广泛应用于 $key=>$value)序列。方法

    rewind() 
    while valid() {
        current() in $value 
        key() in $key 
        next()
    } 
    End of Loop
    

    我想知道如何访问next()和rewind()的值。有什么想法吗?

    更新 :从foreach循环内部访问它们

    3 回复  |  直到 15 年前
        1
  •  1
  •   Artefacto    15 年前

    你不能。触发一个 reset ,您需要重新进入循环,并调用 next ,您需要进入下一个迭代。

    所以最接近的(PHP5.3)是:

    label:
    foreach ($var as $k => $v) {
    
        /* ... */
        goto label; //re-enter loop
    
        /* ... */
        continue; //force going to the next iteration
    
        /* ... */
    }
    

    如果您直接使用迭代器,则可以使用以下调用:

    $r = 0; $s = 0;
    $it = new ArrayIterator(array("a" => 3, "b" => 5, "c" => 7));
    foreach ($it as $k => $v) {
        echo "$k => $v\n";
        if ($s == 0) {
            $s = 1;
            $it->next(); //jump over one iteration
        } else if ($r == 0) {
            $r = 1;
            $it->rewind();
        }
    }
    

    给予:

    a => 3
    c => 7
    b => 5
    c => 7
    
        2
  •  2
  •   Felipe Cardoso Martins    15 年前

    你觉得怎么样?

    for ($i =0; $i < count($arr); $i++) {
    
        $last = ($i == 0) ? null : $arr[$i-1];
        $next = (isset($arr[$i+1]) ? $arr[$i+1] : null;
        $current = $arr[$i];
    
        //...
    
    }
    
        3
  •  0
  •   prodigitalson    15 年前

    Iterator

    rewind next 两者都设置指针在被迭代的数据集中的位置。。。它们实际上并不返回元素或索引。所以调用其中任何一个都会破坏你的循环。

    current 将返回与循环中已有的变量相同的变量,即当前迭代的元素。 key 将返回集合中该项的索引。

    推荐文章