Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 15
0.00% covered (danger)
0.00%
0 / 2
CRAP
0.00% covered (danger)
0.00%
0 / 1
Base
0.00% covered (danger)
0.00%
0 / 15
0.00% covered (danger)
0.00%
0 / 2
6
0.00% covered (danger)
0.00%
0 / 1
 sortByName
0.00% covered (danger)
0.00%
0 / 5
0.00% covered (danger)
0.00%
0 / 1
2
 sortWithCollator
0.00% covered (danger)
0.00%
0 / 10
0.00% covered (danger)
0.00%
0 / 1
2
1<?php
2
3/**
4 * @package Zmsdldb
5 * @copyright BerlinOnline Stadtportal GmbH & Co. KG
6 **/
7
8namespace BO\Zmsdldb\Collection;
9
10use BO\Zmsdldb\Helper\Sorter;
11
12/**
13 * @extends \ArrayObject<int|string, \BO\Zmsdldb\Entity\Base>
14 */
15class Base extends \ArrayObject
16{
17    public function sortByName()
18    {
19        $itemList = clone $this;
20        $itemList->uasort(function ($a, $b) {
21            return strcmp(Sorter::toSortableString($a->getName()), Sorter::toSortableString($b->getName()));
22        });
23        return $itemList;
24    }
25
26    public function sortWithCollator($field = 'name', $locale = 'de')
27    {
28        $collator = collator_create($locale);
29        $collator->setStrength(\Collator::QUATERNARY);
30        $collator->setAttribute(\Collator::QUATERNARY, \Collator::ON);
31        $collator->setAttribute(\Collator::CASE_FIRST, \Collator::ON);
32        $collator->setAttribute(\Collator::NUMERIC_COLLATION, \Collator::ON);
33
34        $itemList = clone $this;
35        $itemList->uasort(function ($itemA, $itemB) use ($collator, $field) {
36            return collator_compare($collator, $itemA[$field], $itemB[$field]);
37        });
38        return $itemList;
39    }
40}