50 foreach ($node->children() as $child) {
51 if (
"key" === $child->getName()) {
52 $this->sortingKeys->append(
new Key($child));
67 public function sort(&$data)
69 if (is_array($data)) {
72 $dataToSort = $data->toArray();
74 $data->replace($this->performSort(0, $dataToSort));
91 private function performSort($keyNumber, $dataToSort)
93 if (count($dataToSort) < 2) {
98 $key = $this->sortingKeys->get($keyNumber);
99 $variable = $key->getVariable();
102 if ($key->isDateVariable()) {
104 $newKey = clone $key;
105 $newKey->setRangePart(2);
106 $key->setRangePart(1);
107 $this->sortingKeys->append($newKey);
112 foreach ($dataToSort as $citationNumber => $dataItem) {
113 if ($key->isNameVariable()) {
115 } elseif ($key->isNumberVariable()) {
116 $sortKey = $dataItem->{$variable};
117 } elseif ($key->isDateVariable()) {
119 } elseif ($key->isMacro()) {
122 )->render($dataItem, $citationNumber)));
123 } elseif ($variable ===
"citation-number") {
124 $sortKey = $citationNumber + 1;
126 $sortKey = mb_strtolower(strip_tags($dataItem->{$variable}));
128 $groupedItems[$sortKey][] = $dataItem;
131 if ($this->sortingKeys->count() > ++$keyNumber) {
132 foreach ($groupedItems as $group => &$array) {
133 if (
count($array) > 1) {
134 $array = $this->performSort($keyNumber, $array);
140 if ($key->getSort() ===
"ascending") {
141 ksort($groupedItems);
143 krsort($groupedItems);
147 $sortedDataGroups = array_values($groupedItems);
148 return $this->
flatten($sortedDataGroups);
151 public function flatten($array)
154 array_walk_recursive($array,
function ($a) use (&$returnArray) {
163 public function getSortingKeys()
165 return $this->sortingKeys;