Built in support for sets in PHP?
The answer is no, there is not a native set solution inside PHP. There is a Set
data structure, but that is not baseline PHP.
There is a convention for implementing sets using maps (i.e. associative arrays) in any language. And for PHP you should use true
as the bottom value.
<?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);
Just an idea, if you use the array keys instead of values, you'll be sure there are no duplicates, also this allows for easy merging of two "sets".
$set1 = array ('a' => 1, 'b' => 1, );
$set2 = array ('b' => 1, 'c' => 1, );
$union = $set1 + $set2;
I also had this problem and so have written a Class: https://github.com/jakewhiteley/php-set-object
As suggested, it does extend and ArrayObject and allow native-feeling insertion/iteration/removal of values, but without using array_unique()
anywhere.
Implementation is based on the MDN JS Docs for Sets in EMCA 6 JavaScript.
You can use array_combine for removing duplicates
$cars = array("Volvo", "BMW", "Toyota");
array_push($cars,"BMW");
$map = array_combine($cars, $cars);