note 101394 added to function.natcasesort
| From: | w-dot-rosenbach-at-netskill-de at osu1 dot php dot net | Date: | Tue, 14 Dec 2010 17:45:44 +0000 |
| Subject: | note 101394 added to function.natcasesort | ||
| Groups: | php.notes | ||
| Request: | Send a blank email to php-notes+get-174914@lists.php.net to get a copy of this message | ||
Sorting UTF-8 by arbitrary order:
mb_internal_encoding("UTF-8");
class utf_8_german
{
// everything else is sorted at the end
static $order = '0123456789AaÃäBbCcDdEeFfGgHhIiJjKkLlMm
NnOoÃöPpQqRrSsÃTtUuÃüVvWwXxYyZz';
static $char2order;
static function cmp($a, $b) {
if ($a == $b) {
return 0;
}
// lazy init mapping
if (empty(self::$char2order))
{
$order = 1;
$len = mb_strlen(self::$order);
for ($order=0; $order<$len; ++$order)
{
self::$char2order[mb_substr(self::$order, $order, 1)] = $order;
}
}
$len_a = mb_strlen($a);
$len_b = mb_strlen($b);
$max=min($len_a, $len_b);
for($i=0; $i<$max; ++$i)
{
$char_a= mb_substr($a, $i, 1);
$char_b= mb_substr($b, $i, 1);
if ($char_a == $char_b) continue;
$order_a = (isset(self::$char2order[$char_a])) ? self::$char2order[$char_a] : 9999;
$order_b = (isset(self::$char2order[$char_b])) ? self::$char2order[$char_b] : 9999;
return ($order_a < $order_b) ? -1 : 1;
}
return ($len_a < $len_b) ? -1 : 1;
}
}
// usage example:
$t = array(
'Birnen', 'Birne', 'Ãpfel', 'Apfel',
);
uasort($t, 'utf_8_german::cmp');
echo '$t:
<pre>'.htmlspecialchars(print_r($t,true),null,'UTF-8').'</pre>';
----
Server IP: 217.160.235.204
Probable Submitter: 87.79.65.121
----
Manual Page -- http://www.php.net/manual/en/function.natcasesort.php
Edit -- https://master.php.net/note/edit/101394
Del: integrated -- https://master.php.net/note/delete/101394/integrated
Del: useless -- https://master.php.net/note/delete/101394/useless
Del: bad code -- https://master.php.net/note/delete/101394/bad+code
Del: spam -- https://master.php.net/note/delete/101394/spam
Del: non-english -- https://master.php.net/note/delete/101394/non-english
Del: in docs -- https://master.php.net/note/delete/101394/in+docs
Del: other reasons-- https://master.php.net/note/delete/101394
Reject -- https://master.php.net/note/reject/101394
Search -- https://master.php.net/manage/user-notes.php