<?php $coll = collator_create('en_US'); $result = collator_compare($coll, "string#1", "string#2");
/** * A reverse case-insensitive string comparison callback function for sorting. * @param string $string1 The first string. * @param string $string2 The second string. * @return int Returns 0 if $string1 = $string2 or if there is an error; 1 if $string1 < $string2; -1 if $string1 > $string2. */ function _api_casercmp($string1, $string2) { global $_api_collator, $_api_encoding; $result = collator_compare($_api_collator, api_strtolower(api_utf8_encode($string2, $_api_encoding), 'UTF-8'), api_strtolower(api_utf8_encode($string1, $_api_encoding), 'UTF-8')); return $result === false ? 0 : $result; }
}); if (empty($diff)) { // The duplicates are not removed right away because they might // still be needed for other duplicate checks (for example, // when there are locales like bs-Latn-BA, bs-Latn, bs). $duplicates[] = $locale; } } } // Remove the duplicates. foreach ($duplicates as $locale) { unset($languages[$locale]); } // Write out the localizations. foreach ($languages as $locale => $localizedLanguages) { $collator = collator_create($locale); uasort($localizedLanguages, function ($a, $b) use($collator) { return collator_compare($collator, $a['name'], $b['name']); }); file_put_json($locale . '.json', $localizedLanguages); } /** * Converts the provided data into json and writes it to the disk. */ function file_put_json($filename, $data) { $data = json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE); // Indenting with tabs instead of 4 spaces gives us 20% smaller files. $data = str_replace(' ', "\t", $data); file_put_contents($filename, $data); }
function ut_coll_compare($coll, $str1, $str2) { return $GLOBALS['oo-mode'] ? $coll->compare($str1, $str2) : collator_compare($coll, $str1, $str2); }
/** * Performs string comparison in so called "natural order", case sensitive, language sensitive, with extended multibyte support. * @param string $string1 The first string. * @param string $string2 The second string. * @param string $language (optional) The language in which comparison is to be made. If language is omitted, interface language is assumed then. * @param string $encoding (optional) The used internally by this function character encoding. If it is omitted, the platform character set will be used by default. * @return int Returns < 0 if $string1 is less than $string2; > 0 if $string1 is greater than $string2; and 0 if the strings are equal. * This function is aimed at replacing the function strnatcmp() for human-language strings. * @link http://php.net/manual/en/function.strnatcmp.php * @link http://php.net/manual/en/collator.compare.php */ function api_strnatcmp($string1, $string2, $language = null, $encoding = null) { if (INTL_INSTALLED) { $collator = _api_get_alpha_numerical_collator($language); if (is_object($collator)) { $result = collator_compare($collator, api_utf8_encode($string1, $encoding), api_utf8_encode($string2, $encoding)); return $result === false ? 0 : $result; } } return strnatcmp($string1, $string2); }