【问题标题】:Return from loop but the execution of loop not effects?从循环返回但循环的执行不影响?
【发布时间】:2018-03-19 06:21:03
【问题描述】:

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

问题-

$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 新手,所以任何帮助或想法都将不胜感激?

【问题讨论】:

  • 短awser是No.
  • 请给出代码C#或者最终结果

标签: c# php loops iterator recursive-query


【解决方案1】:

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

但是有一些方法可以执行循环并将其返回给静态对象或全局变量。

【讨论】:

    【解决方案2】:

    其实你可以。您正在寻找的是相当于 C# 中的 yield 关键字。根据php documentation,可以在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
    

    【讨论】:

      猜你喜欢
      • 2013-05-10
      • 2021-01-23
      • 2023-01-18
      • 2017-02-27
      • 2016-07-20
      • 1970-01-01
      • 2017-09-28
      • 2019-07-31
      • 1970-01-01
      相关资源
      最近更新 更多