php Array_unique on a laravel eleficient collection

hof1towb  于 2023-04-19  发布在  PHP
关注(0)|答案(4)|浏览(153)

不知道这是否可能,但我试图运行array_unique在一个集合的项目,我有,以消除重复。虽然我不能得到它的工作。
我的控制器逻辑:

// init models
    $jobs = Job::search();
    $countries = $jobs->get()->map(function( $job ) {

        return $job->country;
    });
    $countries = array_unique( $countries->toArray() );

尽管这会得到一个“数组到字符串转换”错误

oxalkeyp

oxalkeyp1#

您可以尝试Collection类的Unique方法:

$countries = $countries->unique();

Collection类有几个很棒的方法。你可以在Laravel API documentation中读到。
我同意有时候在内存中的现有集合上进行“查询”会更有效(而不是使用Querybuilder类在数据库上进行另一次查询),例如您首先要计数,然后过滤。在.NET LINQ中,您可以在IEnumerable(内存中的集合)上查询几乎与在数据库上查询相同,这是我非常喜欢的。

q3aa0525

q3aa05252#

我有类似的问题,虽然时间已经过去了,因为它可能是有用的人今天。
我遇到的问题是,当我在集合上调用unique方法时,它不起作用,这可能是第一个答案被接受的原因。所以如果你有模型,你想根据特定的字段删除重复的内容,你可以传递参数给你的unique方法,在这种情况下,它会是:

$countries->unique('code');

你可能会注意到只有第一个值会保留下来,所以如果你开发了一个购物车应用程序,出于某种原因想要合并购物车,并且只想拥有最近的物品,你可以反转集合,调用unique并将其反转回来:

$countries->reverse()->unique('code')->reverse(); // it doesn't really make sense in this example though

这可能不是最好的选择,最好在数据库端进行过滤,但有选择是很好的。

cngwdvgl

cngwdvgl3#

您可以在select子句中使用distinctgroup by在DB结果中具有唯一值。但是,如果您真的需要在对象数组上具有唯一值,您可以执行以下操作:

$uniques = array();
foreach ($countries as $c) {
    $uniques[$c->code] = $c; // Get unique country by code.
}

dd($uniques);
3pmvbmvn

3pmvbmvn4#

如果您确实想这样做,那么可以在有说服力的集合上尝试使用filter方法
http://laravel.com/docs/eloquent#collections

相关问题