X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=application%2FUtils.php;h=9d0ebc5ea3a86c68ac7693c9f793855866658d0c;hb=aa4797ba3679b847adc895e2f817ac058779a171;hp=ab463af9749cf3a597305fa37e1e91dbcf26046f;hpb=bc988eb0420156219fdeb7af684fff37c8b33f4b;p=github%2Fshaarli%2FShaarli.git diff --git a/application/Utils.php b/application/Utils.php index ab463af9..9d0ebc5e 100644 --- a/application/Utils.php +++ b/application/Utils.php @@ -435,3 +435,34 @@ function get_max_upload_size($limitPost, $limitUpload, $format = true) $maxsize = min($size1, $size2); return $format ? human_bytes($maxsize) : $maxsize; } + +/** + * Sort the given array alphabetically using php-intl if available. + * Case sensitive. + * + * Note: doesn't support multidimensional arrays + * + * @param array $data Input array, passed by reference + * @param bool $reverse Reverse sort if set to true + * @param bool $byKeys Sort the array by keys if set to true, by value otherwise. + */ +function alphabetical_sort(&$data, $reverse = false, $byKeys = false) +{ + $callback = function($a, $b) use ($reverse) { + // Collator is part of PHP intl. + if (class_exists('Collator')) { + $collator = new Collator(setlocale(LC_COLLATE, 0)); + if (!intl_is_failure(intl_get_error_code())) { + return $collator->compare($a, $b) * ($reverse ? -1 : 1); + } + } + + return strcasecmp($a, $b) * ($reverse ? -1 : 1); + }; + + if ($byKeys) { + uksort($data, $callback); + } else { + usort($data, $callback); + } +}