diff --git a/CHANGELOG.md b/CHANGELOG.md index 41a77911..7978b95f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -26,6 +26,7 @@ - Chg #166: Remove `EqualsEmpty` filter (@vjik) - Bug #173: Make `Like` filter case-sensitive (@arogachev) - New #173: Add `ILike` filter (case-insensitive variation of `Like` filter) (@arogachev) +- New #176: Add `OrderHelper` (@vjik) ## 1.0.1 January 25, 2023 diff --git a/src/Reader/OrderHelper.php b/src/Reader/OrderHelper.php new file mode 100644 index 00000000..d35b05d9 --- /dev/null +++ b/src/Reader/OrderHelper.php @@ -0,0 +1,66 @@ + $direction) { + $parts[] = ($direction === 'desc' ? '-' : '') . $field; + } + + return implode(',', $parts); + } +} diff --git a/src/Reader/Sort.php b/src/Reader/Sort.php index ca5ed950..bf2d5ab7 100644 --- a/src/Reader/Sort.php +++ b/src/Reader/Sort.php @@ -8,13 +8,9 @@ use function array_key_exists; use function array_merge; -use function implode; use function is_array; use function is_int; use function is_string; -use function preg_split; -use function substr; -use function trim; /** * Sort represents data sorting settings: @@ -226,18 +222,9 @@ public static function any(array $config = []): self */ public function withOrderString(string $orderString): self { - $order = []; - $parts = preg_split('/\s*,\s*/', trim($orderString), -1, PREG_SPLIT_NO_EMPTY); - - foreach ($parts as $part) { - if (str_starts_with($part, '-')) { - $order[substr($part, 1)] = 'desc'; - } else { - $order[$part] = 'asc'; - } - } - - return $this->withOrder($order); + return $this->withOrder( + OrderHelper::stringToArray($orderString) + ); } /** @@ -289,13 +276,7 @@ public function getOrder(): array */ public function getOrderAsString(): string { - $parts = []; - - foreach ($this->currentOrder as $field => $direction) { - $parts[] = ($direction === 'desc' ? '-' : '') . $field; - } - - return implode(',', $parts); + return OrderHelper::arrayToString($this->currentOrder); } /**