PHP中对集合的内置支持?

PHP中对集合的内置支持?,php,set,Php,Set,我正在寻找一种在php中创建数组的简单方法,该方法不允许重复条目,但允许轻松组合其他集合或数组 我最感兴趣的是这种语言中是否存在这样的特性,因为编写自己的特性并不困难。如果不需要,我就不想这样做。这是一个想法,如果使用数组键而不是值,您将确保没有重复项,而且这允许轻松合并两个“集” 我也有这个问题,所以写了一个课程: 正如所建议的,它确实扩展和ArrayObject并允许原生感觉插入/迭代/删除值,但不在任何地方使用array\u unique() 实现基于EMCA 6 JavaScript中集

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


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

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


我也有这个问题,所以写了一个课程:

正如所建议的,它确实扩展和ArrayObject并允许原生感觉插入/迭代/删除值,但不在任何地方使用
array\u unique()


实现基于EMCA 6 JavaScript中集合的MDN JS文档。

您可以使用array\u combine删除重复项

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

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

在Laravel中,
Collection
类中有一个方法
unique
,可能会有所帮助。来自Laravel:


答案是否定的,PHP中没有本机的set解决方案。有一个,但这不是PHP的基线

在任何语言中,都有使用映射(即关联数组)实现集合的约定。对于PHP,应该使用
true
作为底值

试试这个

<?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 )
?>


有趣的想法。不知道有没有缺点。作为这个想法的延续:
函数和集($a,$b){返回数组键(数组翻转($a)+数组翻转($b))}打印(和集(数组(1,2,3),数组(3,4,5))如果要在
集中存储
对象
,则此操作不起作用
关联数组
不允许将
对象
作为键。我使用
$my_set['a']='a'
将值插入到“set”中,而不是
$my_set['a']='1'
,因此我不在乎是否请求键或值。缺点是使用额外的内存来设置值,但实际上您并不需要这些值。请看一看from。看起来它现在已经内置到PHP中了@ConnorLeech和它看起来就像zrvan建议的那样。有趣的是,它保留了插入顺序。在
集合
类上通常看不到这一点,但这只是数组的包装器,实际上,这是一种非常低效的解决问题的方法。此外,每次需要具有唯一值的数组时,都必须“记住”调用
array\u combine
$collection = collect([1, 1, 2, 2, 3, 4, 2]);
$unique = $collection->unique();
$unique->values()->all();
// [1, 2, 3, 4]
<?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 )
?>