Laravel集合如何实现自定义唯一校验规则,判定指定行组合是否唯一
Laravel 集合自定义唯一校验逻辑实现方法
Laravel 集合内置的 unique() 方法支持传入自定义回调,你只需在回调中返回用于判定唯一性的特征值即可:只要两条数据的回调返回值完全一致,就会被识别为重复数据,去重时仅保留第一条。
针对你描述的业务场景(前两个元素相同即判定为同一条唯一数据,忽略第三个元素的值),可直接使用如下代码实现:
// 示例集合 $collection = collect([ ['id1', 'id2', ''], ['id1', 'id2', 'abc'], ['id3', 'id4', 'test'], ['id3', 'id4', ''] ]); // 自定义规则去重 $uniqueCollection = $collection->unique(function ($item) { // 取前两个元素拼接为唯一判定键,|为分隔符避免ID拼接后哈希冲突 return $item[0] . '|' . $item[1]; // 若ID可能包含|符号,可改用序列化方式更稳妥: // return serialize([$item[0], $item[1]]); }); // 输出去重后的结果,仅保留2条数据:['id1','id2','']、['id3','id4','test'] var_dump($uniqueCollection->values()->all());
如果你需要的是校验集合中是否存在符合自定义规则的重复数据,而非直接去重,可以使用同样支持自定义回调的 duplicates() 方法:
$hasDuplicate = $collection->duplicates(function ($item) { return $item[0] . '|' . $item[1]; })->isNotEmpty();
当 $hasDuplicate 为 true 时,说明集合中存在你定义的重复数据。
内容的提问来源于stack exchange,提问作者Bhumi Shah
相关产品推荐
相关产品推荐

