Built in support for sets in PHP?

后端 未结 5 1018
一生所求
一生所求 2020-12-05 16:45

I\'m looking for a simple way to create an array in php that will not allow duplicate entries, but allows for easy combining of other sets or arrays.

I\'m mostly int

相关标签:
5条回答
  • 2020-12-05 17:23

    You can use array_combine for removing duplicates

    $cars = array("Volvo", "BMW", "Toyota");
    array_push($cars,"BMW");
    
    $map = array_combine($cars, $cars);
    
    0 讨论(0)
  • 2020-12-05 17:26

    In Laravel there is a method unique in Collection class that may be helpful. From Laravel documentation:

    $collection = collect([1, 1, 2, 2, 3, 4, 2]);
    $unique = $collection->unique();
    $unique->values()->all();
    // [1, 2, 3, 4]
    
    0 讨论(0)
  • 2020-12-05 17:30

    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);
    
    0 讨论(0)
  • 2020-12-05 17:32

    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;
    
    0 讨论(0)
  • 2020-12-05 17:39

    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.

    0 讨论(0)
提交回复
热议问题