Theory
Definition
An M-partial intersection (for M > 0) of N sets is a set elements in which are contained in at least M initial sets.
Properties
For any N sets:
- 1-partial intersection is equivalent to the union of these sets.
- N-partial intersection is equivalent to the common (complete) intersection of these sets.
- For any M > N M-partial intersection always equals to the empty set.
Examples
- Simple integer sets example
- Iterable integer sets example
- Mixed iterable sets example
- Multisets example
Simple integer sets example
Given: sets A, B, C, D (N = 4).
$a = [1, 2, 3, 4, 5]; $b = [1, 2, 10, 11]; $c = [1, 2, 3, 12]; $d = [1, 4, 13, 14];
M = 1
It is equivalent to A ∪ B ∪ C ∪ D.
use Smoren\PartialIntersection\IntegerSetArrayImplementation; $r = IntegerSetArrayImplementation::partialIntersection(1, $a, $b, $c, $d); // [1, 2, 3, 4, 5, 10, 11, 12, 13, 14]
M = 2
use Smoren\PartialIntersection\IntegerSetArrayImplementation; $r = IntegerSetArrayImplementation::partialIntersection(2, $a, $b, $c, $d); // [1, 2, 3, 4]
M = 3
use Smoren\PartialIntersection\IntegerSetArrayImplementation; $r = IntegerSetArrayImplementation::partialIntersection(3, $a, $b, $c, $d); // [1, 2]
M = 4 (M = N)
It is equivalent to A ∩ B ∩ C ∩ D.
use Smoren\PartialIntersection\IntegerSetArrayImplementation; $r = IntegerSetArrayImplementation::partialIntersection(4, $a, $b, $c, $d); // [1]
M = 5 (M > N)
Equals to an empty set.
use Smoren\PartialIntersection\IntegerSetArrayImplementation; $r = IntegerSetArrayImplementation::partialIntersection(5, $a, $b, $c, $d); // []
Iterable integer sets example
$a = [1, 2, 3, 4, 5]; $b = [1, 2, 10, 11]; $c = [1, 2, 3, 12]; $d = [1, 4, 13, 14]; use Smoren\PartialIntersection\IntegerSetIterableImplementation; $r = IntegerSetArrayImplementation::partialIntersection(1, $a, $b, $c, $d); print_r(iterator_to_array($r)); // [1, 2, 3, 4, 5, 10, 11, 12, 13, 14] $r = IntegerSetArrayImplementation::partialIntersection(2, $a, $b, $c, $d); print_r(iterator_to_array($r)); // [1, 2, 3, 4] $r = IntegerSetArrayImplementation::partialIntersection(3, $a, $b, $c, $d); print_r(iterator_to_array($r)); // [1, 2] $r = IntegerSetArrayImplementation::partialIntersection(4, $a, $b, $c, $d); print_r(iterator_to_array($r)); // [1] $r = IntegerSetArrayImplementation::partialIntersection(5, $a, $b, $c, $d); print_r(iterator_to_array($r)); // []
Mixed iterable sets example
$a = ['1', 2, 3, 4, 5]; $b = ['1', 2, 10, 11]; $c = ['1', 2, 3, 12]; $d = ['1', 4, 13, 14]; use Smoren\PartialIntersection\MixedSetIterableImplementation; $r = MixedSetIterableImplementation::partialIntersection(true, 1, $a, $b, $c, $d); print_r(iterator_to_array($r)); // ['1', 2, 3, 4, 5, 10, 11, 12, 13, 14] $r = MixedSetIterableImplementation::partialIntersection(true, 2, $a, $b, $c, $d); print_r(iterator_to_array($r)); // ['1', 2, 3, 4] $r = MixedSetIterableImplementation::partialIntersection(true, 3, $a, $b, $c, $d); print_r(iterator_to_array($r)); // ['1', 2] $r = MixedSetIterableImplementation::partialIntersection(true, 4, $a, $b, $c, $d); print_r(iterator_to_array($r)); // ['1'] $r = IntegerSetArrayImplementation::partialIntersection(true, 5, $a, $b, $c, $d); print_r(iterator_to_array($r)); // []
Multisets example
Note: If input collections contains duplicate items, then multiset intersection rules apply.
$a = [1, 1, 1, 1, 1]; $b = [1, 2, 3, 4, 5, 1, 2, 3, 4, 5]; $c = [5, 5, 5, 5, 5, 1, 5, 5, 1]; use Smoren\PartialIntersection\MultisetIterableImplementation; $r = MultisetIterableImplementation::partialIntersection(true, 1, $a, $b, $c); print_r(iterator_to_array($r)); // [1, 1, 1, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 5, 5, 5, 5, 5] $r = MultisetIterableImplementation::partialIntersection(true, 2, $a, $b, $c); print_r(iterator_to_array($r)); // [1, 1, 5, 5] $r = MultisetIterableImplementation::partialIntersection(true, 3, $a, $b, $c); print_r(iterator_to_array($r)); // [1, 1] $r = MultisetIterableImplementation::partialIntersection(true, 4, $a, $b, $c); print_r(iterator_to_array($r)); // []
Unit testing
composer install
composer test-init
composer test





