我正在寻找一种简单的方法来在 php 中创建一个数组,该数组将不允许重复输入,但允许轻松组合其他集合或数组。
我主要对语言中是否存在这样的功能感兴趣,因为编写自己的语言并不困难。 我只是不想,如果我不需要。
只是一个想法,如果您使用数组键而不是值,则可以确保没有重复项,这也可以轻松合并两个“集合”。
$set1 = array ('a' => 1, 'b' => 1, ); $set2 = array ('b' => 1, 'c' => 1, ); $union = $set1 + $set2;
答案是否定的,PHP中没有本机设置解决方案。 有一个true数据结构,但这不是基线PHP。
true
对于使用任何语言的地图(即关联数组)来实现集合,存在一种约定。 对于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);
我也有这个问题,所以写了一个类:[https://github.com/jakewhiteley/php-set-object]
如建议的那样,它确实扩展了ArrayObject并允许插入/迭代/删除值,但在任何地方都没有使用array_unique()。
array_unique()
实现基于EMCA 6 JavaScript中的MDN JS文档集。
您可以使用array_combine删除重复项
$cars = array("Volvo", "BMW", "Toyota"); array_push($cars,"BMW"); $map = array_combine($cars, $cars);
在Laravel中,Collection类中的方法unique可能会有所帮助。 从Laravel文档中:
Collection
unique
$collection = collect([1, 1, 2, 2, 3, 4, 2]); $unique = $collection->unique(); $unique->values()->all(); // [1, 2, 3, 4]