ArrayHelper   A
last analyzed

Complexity

Total Complexity 4

Size/Duplication

Total Lines 31
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 0

Importance

Changes 0
Metric Value
wmc 4
lcom 0
cbo 0
dl 0
loc 31
rs 10
c 0
b 0
f 0

1 Method

Rating   Name   Duplication   Size   Complexity  
A partition() 0 18 4
1
<?php
2
declare(strict_types = 1);
3
4
namespace PTS\Tools;
5
6
class ArrayHelper
7
{
8
9
    /**
10
     * Разделяет массив на n частей с сохранением порядка и индексов
11
     * Каждый callback (=true) является бакетом. Все что осталось (все callback = false) становится последним бакетом
12
     *
13
     * @param array $collection
14
     * @param callable ...$callbacks
15
     *
16
     * @return array
17
     */
18
    public function partition(array $collection, callable ...$callbacks): array
19
    {
20
        $partitions = array_fill(0, count($callbacks) + 1, []);
21
22
        foreach ($collection as $index => $element) {
23
            $partition = 0;
24
            foreach ($callbacks as $partition => $callback) {
25
                if ($callback($element, $index, $collection)) {
26
                    $partitions[$partition][$index] = $element;
27
                    continue 2;
28
                }
29
            }
30
            $partition++;
31
            $partitions[$partition][$index] = $element;
32
        }
33
34
        return $partitions;
35
    }
36
}
37