Array_unique在一个雄辩的集合

2022-08-30 21:45:23

不确定这是否可能,但我试图在我拥有的项目集合上运行array_unique,以删除重复项。虽然我不能让它工作。

我的控制器逻辑:

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

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

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


答案 1

您可以尝试 Collection 类的独特方法:

$countries = $countries->unique();

集合类有几个很棒的方法。您可以在Laravel API文档中阅读有关此内容的信息。

我同意,有时对内存中的现有集合进行“查询”会更有效(而不是使用Querybuilder类对数据库进行另一次查询),例如,您首先要计数然后进行筛选。在 .NET LINQ 中,您几乎可以像在数据库上一样在 IEnumerable(内存中集合)上进行查询,这是我真正喜欢的。


答案 2

我有类似的问题,虽然时间已经过去了,因为它可能对今天的某人有用。

我遇到的问题是,当我在收集项目时调用方法时,它不起作用,这可能是第一个答案被接受的原因。因此,如果您有模型并且想要根据特定字段删除重复项,则可以将参数传递给您的方法,在这种情况下,它将是:uniqueunique

$countries->unique('code');

这样,您只会有具有唯一代码的国家/地区。您可能会注意到只有第一个值保持不变,因此,如果您开发了一个购物车应用程序,并且出于某种原因想要合并购物车并且只想拥有最近的项目,您可以撤消集合并将其调用并撤消:unique

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

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


推荐