note 101394 added to function.natcasesort

From: 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

« previous php.notes (#174914) next »