setAttribute(\Collator::NUMERIC_COLLATION, $numeric_collation); $mrbs_collator = new \MRBS\Intl\Collator($locale); $mrbs_collator->setAttribute(\MRBS\Intl\Collator::NUMERIC_COLLATION, $numeric_collation); $strengths = [ \Collator::PRIMARY, \Collator::SECONDARY, \Collator::TERTIARY, \Collator::QUATERNARY, \Collator::IDENTICAL ]; foreach ($strengths as $strength) { $php_collator->setStrength($strength); $mrbs_collator->setStrength($strength); echo ""; echo "asort"; echo "" . escape_html($locale) . ""; echo "" . implode(',', $array) . ""; echo "" . escape_html($flags) . ""; echo "" . $php_collator->getAttribute(\Collator::NUMERIC_COLLATION) . ""; echo "" . $php_collator->getStrength() . ""; $php_array = $array; $mrbs_array = $array; $php_collator->asort($php_array, $flags); $mrbs_collator->asort($mrbs_array, $flags); echo "[" . implode(',', array_keys($php_array)) . '] [' . implode(',', array_values($php_array)) . "]"; echo "[" . implode(',', array_keys($mrbs_array)) . '] [' . implode(',', array_values($mrbs_array)) . "]"; // Compare the results $passed = ($php_array === $mrbs_array); $color = ($passed) ? $color_pass : $color_fail; echo ''; echo ($passed) ? 'Pass' : 'Fail'; echo ""; echo "\n"; } echo "\n"; } function test_asort() { echo "

Testing asort()

\n"; echo "\n"; echo thead_html(['locale', 'array', 'flags', 'numeric_collation', 'strength']); echo "\n"; $locale = 'en-US'; $array = ['aò', 'Ao', 'ao']; do_asort($locale, $array); $locale = 'en-US'; $array = ['a', 'b', 'A', 'B']; do_asort($locale, $array); $locale = 'en-US'; $array = ['aBc', 'abC', 'Abc', 'ABc']; do_asort($locale, $array); $locale = 'sv'; $array = ['ö', 'ä', 'å']; do_asort($locale, $array); $locale = 'sv-SE'; $array = ['ö', 'ä', 'å']; do_asort($locale, $array); $locale = 'sv'; $array = ['ö', 'ä', 'å', 'o', 'a', 'e']; do_asort($locale, $array); $locale = 'en-US'; $array = ['a10', 'b2', 'A2', 'B10']; do_asort($locale, $array); do_asort($locale, $array, \Collator::SORT_NUMERIC); $array = ['a1', 'a2', 'a10', 'b2', 'b10']; do_asort($locale, $array, \Collator::SORT_NUMERIC); $numeric_collation = \Collator::ON; $locale = 'fr'; $array = ['1', '2', '10']; do_asort($locale, $array, \Collator::SORT_REGULAR, $numeric_collation); do_asort($locale, $array, \Collator::SORT_NUMERIC, $numeric_collation); $array = ['a', 'à', 'â', 'e', 'é']; do_asort($locale, $array); $array = array_reverse($array); do_asort($locale, $array); $array = ['a', 'A']; do_asort($locale, $array); $array = array_reverse($array); do_asort($locale, $array); $array = ['Ba', 'aB']; do_asort($locale, $array); $array = array_reverse($array); do_asort($locale, $array); $array = ['ABC', 'aBc', 'Abc', 'Abc', 'ABc']; do_asort($locale, $array); $array = ['ABC', 'aBc', 'Abc', 'Abc', 'ABc']; do_asort($locale, $array, \Collator::SORT_STRING); $locale = 'no'; $array = ['æ', 'ø', 'å', 'A', 'AA', 'AB', 'Åb', 'åb']; do_asort($locale, $array, \Collator::SORT_REGULAR, $numeric_collation); $locale = 'sv'; $array = ['ä', 'ö', 'å', 'A', 'AA', 'Åb', 'åb']; do_asort($locale, $array, \Collator::SORT_REGULAR, $numeric_collation); $locale = 'en-GB'; $array = ['a', 'b', 'c', 'A', 'B', 'aa', 'Aa', 'AB', 'z', 'zb']; do_asort($locale, $array, \Collator::SORT_REGULAR, $numeric_collation); echo "\n"; echo "
\n"; } function do_compare(string $locale, string $string1, string $string2, int $strength=\Collator::DEFAULT_STRENGTH) { global $color_fail, $color_pass; $php_collator = new \Collator($locale); $php_collator->setStrength($strength); $mrbs_collator = new \MRBS\Intl\Collator($locale); $mrbs_collator->setStrength($strength); echo ""; echo "compare"; echo "" . escape_html($locale) . ""; echo "" . escape_html($string1) . ""; echo "" . escape_html($string2) . ""; echo "" . escape_html($strength) . ""; $php_compare = $php_collator->compare($string1, $string2); $mrbs_compare = $mrbs_collator->compare($string1, $string2); echo "$php_compare"; echo "$mrbs_compare"; // Compare the results $passed = ($php_compare === $mrbs_compare); $color = ($passed) ? $color_pass : $color_fail; echo ''; echo ($passed) ? 'Pass' : 'Fail'; echo ""; echo "\n"; } function test_compare() { echo "

Testing compare()

\n"; echo "\n"; echo thead_html(['locale', 'string1', 'string2', 'strength']); echo "\n"; $tests = [ ['locale' => 'fr', 'string1' => 'é', 'string2' => 'è'], ['locale' => 'fr', 'string1' => 'è', 'string2' => 'é'], ['locale' => 'en-GB', 'string1' => 'é', 'string2' => 'è'], ['locale' => 'en-GB', 'string1' => 'Séan', 'string2' => 'Sean'], ['locale' => 'en-GB', 'string1' => 'a', 'string2' => 'A'], ['locale' => 'en-GB', 'string1' => 'A', 'string2' => 'a'], ['locale' => 'en-GB', 'string1' => 'a', 'string2' => 'b'], ['locale' => 'en-GB', 'string1' => 'bA', 'string2' => 'Ba'] ]; $strengths = [ \Collator::PRIMARY, \Collator::SECONDARY, \Collator::TERTIARY, \Collator::QUATERNARY, \Collator::IDENTICAL ]; foreach ($tests as $test) { list('locale' => $locale, 'string1' => $string1, 'string2' => $string2) = $test; foreach ($strengths as $strength) { do_compare($locale, $string1, $string2, $strength); } echo "\n"; } echo "\n"; echo "
\n"; } $loaded_extensions = get_loaded_extensions(); echo "PHP version: " . PHP_VERSION; echo "
\n"; echo "mbstring enabled: " . var_export(in_array('mbstring', $loaded_extensions), true); echo "
\n"; echo "intl enabled: " . var_export(in_array('intl', $loaded_extensions), true); echo "
\n"; echo "
\n"; if (!in_array('intl', $loaded_extensions)) { die("This test needs the 'intl' PHP extension to be loaded."); } test_constants('Collator'); test_asort(); test_compare();