Jelle-S/arraykeycombiner

View on GitHub
README.md

Summary

Maintainability
Test Coverage
# ArrayKeyCombiner

[![Build Status](https://travis-ci.org/Jelle-S/arraykeycombiner.svg?branch=develop)](https://travis-ci.org/Jelle-S/arraykeycombiner) [![Code Climate](https://codeclimate.com/github/Jelle-S/arraykeycombiner/badges/gpa.svg)](https://codeclimate.com/github/Jelle-S/arraykeycombiner) [![Test Coverage](https://codeclimate.com/github/Jelle-S/arraykeycombiner/badges/coverage.svg)](https://codeclimate.com/github/Jelle-S/arraykeycombiner/coverage) [![Issue Count](https://codeclimate.com/github/Jelle-S/arraykeycombiner/badges/issue_count.svg)](https://codeclimate.com/github/Jelle-S/arraykeycombiner)

Combines arrays by searching for intersections and adding them to the master array. Keys are combined using a delimiter.

```php
use Jelle_S\Util\Combiner\ArrayKeyCombiner;

// Search this array of arrays for intersections and extract them, using a
// delimiter to combine the keys. Limit the number of iterations to search for
// intersections to 10.000, limit the minimum size of intersections to 3, set
// the key delimiter to a comma.
$arrays = array(
 array(
   'a' => 1,
   'b' => 2,
   'c' => 3,
   'd' => 4,
   'e' => 9,
 ),
 array(
   'a' => 1,
   'b' => 2,
   'c' => 3,
   'e' => 9,
 ),
 array(
   'a' => 1,
   'b' => 42,
   'c' => 3,
   'd' => 4,

 ),
 array(
   'b' => 42,
   'c' => 3,
   'a' => 1,
 ),
 array(
   'z' => 26,
   'e' => 9,
   'a' => 1,
 ),
);
$combiner = new Jelle_S\Util\Combiner\ArrayKeyCombiner($arrays, 3, 10000, ',');
print_r($combiner->combine());
```

Output:
```
Array
(
    [4] => Array
        (
            [a] => 1
            [e] => 9
            [z] => 26
        )

    [0,1] => Array
        (
            [a] => 1
            [b] => 2
            [c] => 3
            [e] => 9
        )

    [2,3] => Array
        (
            [a] => 1
            [c] => 3
            [b] => 42
        )

    [2,0] => Array
        (
            [d] => 4
        )

)
```

The 'a' and 'z' keys of the array with key '4' were not combined because the threshold for combinations is 3, and combining them would result in a combined array with only two elements.

The arrays with keys '2' and '0' **were** combined because after extracting the combinations, these two arrays were identical, and the threshold has no effect for **identical** arrays, they are always combined.