【问题标题】:Laravel's collection filter pass by reference not workingLaravel 收集过滤器按引用传递不起作用
【发布时间】:2018-01-02 21:09:00
【问题描述】:

你能帮我使用闭包吗?我正在使用 laravel 的收集过滤器来检查唯一的电子邮件。下面的代码应该填充过滤器函数内的$unique_email 数组。我如何使用引用传递有问题吗?提前致谢。

    $unique_email = array();

    $users->filter(function ($user) use (&$unique_email) {
        if( !in_array(   $user->email , $unique_email  ) ) {
            return $unique_email[] = $user->email;              
        }
    });

    dd($unique_email); //returns empty array

【问题讨论】:

    标签: php laravel-5 closures


    【解决方案1】:

    过滤器必须返回布尔值

    $unique_email = array();
    
    $users->filter(function ($user) use (&$unique_email) {
        if( !in_array(   $user->email , $unique_email  ) ) {
            $unique_email[] = $user->email;
            return true;              
        }
        return false;
    });
    

    【讨论】:

    • 为我工作,很抱歉 :( ,这是个愚蠢的问题,但你检查过 $users 不是一个空集合吗?
    • 谢谢!这就是问题所在。我刚刚意识到我在循环中做了一个 dd() 然后它在第一次迭代时停止了。叹息……
    【解决方案2】:

    像这样使用集合助手怎么样:

    $usersWithUniqueMails = $users->unique('email');
    $unique_email = $usersWithUniqueMails->pluck('email');
    

    【讨论】:

    • 这是我的第一个解决方案,不幸的是,它不适用于加密数据。所以我不得不使用过滤器
    猜你喜欢
    • 2020-08-23
    • 2012-02-10
    • 2021-07-18
    • 2021-08-14
    • 2014-04-12
    • 1970-01-01
    • 1970-01-01
    • 2019-03-27
    • 1970-01-01
    相关资源
    最近更新 更多