【问题标题】:How to use break or continue with Laravel Eloquent Collection's each method?如何在 Laravel Eloquent Collection 的 each 方法中使用 break 或 continue?
【发布时间】:2015-06-25 21:06:36
【问题描述】:

如何在 Laravel Eloquent Collection 的 each 方法中使用 break 或 continue。 我的代码是这样的:

$objectives->each(function($objective) {
        Collection::make($objective)->each(function($action) {
            Collection::make($action)->each(function($success_indicator) {
                Collection::make($success_indicator)->each(function($success_indicator) {
                    echo 'hi';
                    continue;
                });
            });
        });
    });

【问题讨论】:

  • 作为break 的解决方法,您可以在收集时使用first 方法。当您返回第一个 true 结果时,它将停止迭代。但最好向我们展示你真正想要做什么,为什么你需要这个breakcontinue
  • 在某些情况下,我们可以使用exit(); 代替 continuereturn true; return true; 解决方案如下所示。

标签: php laravel collections eloquent laravel-5


【解决方案1】:

就我而言,它正在按我的意愿工作。我检查了上面提到的所有代码。但不工作。请注意,我的版本是 Laravel -5.5

 return collect($models->items())->each(function ($item, $index){
        if( !$item->quoteReturnDetail){  echo  $item ;  exit(); }   });

【讨论】:

    【解决方案2】:

    我们可以返回true/false true for continue, false for break

    继续:

    collect([1,2,3,4])->each(function ($item){
                if ($item === 2) {
                    return true;
                }
                echo $item;
    });
    

    输出: 1 3 4

    休息:

    collect([1,2,3,4])->each(function ($item){
                if ($item === 2) {
                    return false;
                }
                echo $item;
    });
    

    输出: 1

    【讨论】:

    • 实际上你可以只用return; 换成continue,因为要做到break,你需要显式返回false
    • 不工作 .. return collect($models->items())->each(function ($item, $index){ if( $item->quoteReturnDetail){ return false; } echo "测试"; });
    【解决方案3】:

    continue, 只是return 出了内部函数。给break,嗯..

    如果你使用的是 Laravel 5.1+,你可以返回 false 来打破循环:

    $objectives->each(function($objective) {
        collect($objective)->each(function($action) {
            collect($action)->each(function($success_indicator) {
                collect($success_indicator)->each(function($success_indicator) {
                    if ($condition) return false;
                });
            });
        });
    });
    

    对于旧版本的 Laravel,使用常规的 foreach 循环:

    $objectives->each(function($objective) {
        foreach ($objective as $action) {
            foreach ($action as $success_indicators) {
                foreach ($success_indicators as $success_indicator) {
                    echo 'hi';
                    break;
                }
            }
        }
    });
    

    【讨论】:

    • 例如文档5.6 只是说明如何break out: laravel.com/docs/5.6/collections#method-each 而不是如何跳过当前项目。
    • @Roland 跳过,只是return 什么都没有。将退出函数的当前调用,并继续循环中的下一项。
    猜你喜欢
    • 1970-01-01
    • 2014-03-07
    • 1970-01-01
    • 2021-03-26
    • 1970-01-01
    • 2020-03-22
    • 2021-05-30
    • 2020-03-25
    • 2021-08-02
    相关资源
    最近更新 更多