从循环返回,但循环的执行没有影响?

时间:2017-10-07 16:49:58

标签: c# php loops iterator recursive-query

当从循环返回一些值时,在php中是可能的,并且循环的执行仍然从下一个索引继续(如C#中的GetEnumerator()和使用MoveNext())

问题 -

$arr=[0,1,5,9,5];
$i=count($arr);
while($i>0){
    // data base operations
    $_GLOBALS['i']=$_GLOBALS['i']-1;
    //return some value;
}

我是一名c#程序员,也是php的新手,所以任何帮助或想法都会受到高度赞赏?

2 个答案:

答案 0 :(得分:1)

其实你可以。您要查找的内容相当于C#中的yield关键字。根据{{​​3}},可以在php中使用相同的关键字来实现生成器。

文档页面上有一个小例子:

function gen_one_to_three() {
    for ($i = 1; $i <= 3; $i++) {
        // Note that $i is preserved between yields.
        yield $i;
    }
}

$generator = gen_one_to_three();
foreach ($generator as $value) {
    echo "$value\n";
}
     

以上示例将输出:

1
2
3

答案 1 :(得分:0)

返回,因为控件结构return可以在函数(过程)或方法(面向对象)中使用以返回值,但这是可选的。如果您有一个循环whilefor foreach等,并且您在其中使用return,则会将该值返回给调用模块并停止循环。

但是有一些方法可以做一个循环并将其返回到静态对象或全局变量的实例。