| Conditions | 4 |
| Paths | 6 |
| Total Lines | 37 |
| Code Lines | 22 |
| Lines | 0 |
| Ratio | 0 % |
| Changes | 0 | ||
| 1 | <?php |
||
| 21 | protected function fillPartitions(Partitions $partitions, Partition $dataset, int $chunks): void |
||
| 22 | { |
||
| 23 | // Greedy needs a dataset sorted DESC. |
||
| 24 | $dataset->uasort( |
||
| 25 | static function (PartitionItem $left, PartitionItem $right) { |
||
| 26 | return $right->getWeight() <=> $left->getWeight(); |
||
| 27 | } |
||
| 28 | ); |
||
| 29 | |||
| 30 | $partitionsArray = []; |
||
| 31 | $best = $dataset->getWeight() / $chunks; |
||
| 32 | |||
| 33 | for ($p = 1; $p < $chunks; ++$p) { |
||
| 34 | $partition = $this->getPartitionFactory()::create(); |
||
| 35 | |||
| 36 | \reset($dataset); |
||
|
|
|||
| 37 | $key = \key($dataset); |
||
| 38 | $partition->append($dataset[$key]); |
||
| 39 | unset($dataset[$key]); |
||
| 40 | $dataset->exchangeArray(\array_values(\array_reverse($dataset->getArrayCopy()))); |
||
| 41 | |||
| 42 | while ($partition->getWeight() < $best) { |
||
| 43 | \reset($dataset); |
||
| 44 | $key = \key($dataset); |
||
| 45 | $partition->append($dataset[$key]); |
||
| 46 | unset($dataset[$key]); |
||
| 47 | } |
||
| 48 | |||
| 49 | $partitionsArray[] = $partition; |
||
| 50 | |||
| 51 | $dataset->exchangeArray(\array_values(\array_reverse($dataset->getArrayCopy()))); |
||
| 52 | } |
||
| 53 | |||
| 54 | $partitionsArray[] = $dataset; |
||
| 55 | |||
| 56 | foreach ($partitionsArray as $key => $subset) { |
||
| 57 | $partitions->partition($key)->exchangeArray($subset); |
||
| 58 | } |
||
| 61 |