内置支持PHP中的集合?

时间:2011-11-14 20:06:42

标签: php set

我正在寻找一种在php中创建一个不允许重复条目的简单方法,但允许轻松组合其他集合或数组。

我最感兴趣的是这种功能是否存在于该语言中,因为编写我自己的功能并不困难。如果我不需要,我就是不想。

6 个答案:

答案 0 :(得分:63)

只是一个想法,如果您使用数组键而不是值,您将确保没有重复项,这也可以轻松合并两个“集合”。

$set1 = array ('a' => 1, 'b' => 1, );
$set2 = array ('b' => 1, 'c' => 1, );
$union = $set1 + $set2;

答案 1 :(得分:1)

答案是否定的,PHP内部没有本机设置解决方案。有一个Set data structure,但这不是基准PHP。

有一种约定,可以使用任何语言的地图(即关联数组)来实现集合。对于PHP,您应该使用true作为底值。

<?php

$left = [1=>true, 5=>true, 7=>true];
$right = [6=>true, 7=>true, 8=>true, 9=>true];

$union = $left + $right;
$intersection = array_intersect_assoc($left, $right);

var_dump($left, $right, $union, $intersection);

答案 2 :(得分:0)

我也有这个问题,所以编写了一个类:https://github.com/jakewhiteley/php-set-object

正如所建议的那样,它确实扩展了ArrayObject并允许原生插入/迭代/删除值,但不在任何地方使用array_unique()

实施基于EMCA 5 JavaScript中的MDN JS文档集。

答案 3 :(得分:0)

您可以使用array_combine删​​除重复项

$cars = array("Volvo", "BMW", "Toyota");
array_push($cars,"BMW");

$map = array_combine($cars, $cars);

答案 4 :(得分:0)

在Laravel中,unique课程中的方法Collection可能会有所帮助。来自Laravel documentation

$collection = collect([1, 1, 2, 2, 3, 4, 2]);
$unique = $collection->unique();
$unique->values()->all();
// [1, 2, 3, 4]

答案 5 :(得分:0)

试试这个

<?php
$left = ['a', 'b', 'c'];
$right = ['c', 'd', 'e'];

print_r(array_unique(array_merge($left, $right)));

// Array ( [0] => a [1] => b [2] => c [4] => d [5] => e )
?>