PHP比较不定数量数组 获取元素不与其他数组重复的数组
实现逻辑
- 先全局统计所有数组的元素出现次数,出现次数等于1的元素意味着仅在某一个数组中存在
- 遍历每个数组校验:只要数组内所有元素的全局出现次数均为1,说明该数组的所有元素都没有在其他数组中出现过,即为符合要求的数组
Laravel 集合实现代码
完全基于Laravel集合封装的方法实现,无需手动编写循环逻辑:
// 待比较的输入数组,数量不固定 $input = [ [1 => 1072, 2 => 835, 3 => 797, 4 => 586, /* 其余元素 */], [1 => 111, 2 => 835, 3 => 797, 4 => 586, /* 其余元素 */], // 更多数组... ]; // 统计所有元素的全局出现次数 $elementCount = collect($input)->flatten()->countBy(); // 过滤符合要求的数组 $result = collect($input) ->filter(fn ($item) => collect($item)->every(fn ($val) => $elementCount[$val] === 1)) ->toArray();
补充说明
- 上述代码默认保留原数组的索引键,如果需要重置为连续索引,可以在
filter()后追加->values() - 你给出的示例数组中所有数组都包含835、797等重复公共元素,因此示例输入的过滤结果会是空数组,只有当数组所有元素都是全局独有时才会被保留
- 如果需要用原生PHP实现,可替换为
array_count_values、array_merge、array_filter等内置函数组合实现,逻辑一致
内容的提问来源于stack exchange,提问作者Louis B
相关产品推荐
相关产品推荐

