imap sort localization in subject field

From: Date: Sat, 07 May 2005 22:36:56 +0000
Subject: imap sort localization in subject field
Groups: php.i18n 
Request: Send a blank email to php-i18n+get-863@lists.php.net to get a copy of this message
Hello all, imap_sort uses the c-client library to sort messages. This library currently does not support locale-based sort for foreign languages (Although it has charset option). They are working on this(http://www.washington.edu/imap/IMAP-FAQs/#1.12), but you can use the following function which uses strcoll() for locale- based sorting.Pease note that this is required for SUBJECT field sorting, because most of other fields are sorted correctly by imap_sort in any locale: function imap_locale_sort($stream,$criteria,$reverse,$locale,$options) { if ($criteria!=SORTSUBJECT) return (imap_sort($stream,$criteria,$reverse,$options)); $unsorted = array(); $sortresult = array(); $MC=imap_check($stream); $MN=$MC->Nmsgs; $overview = imap_fetch_overview($stream,"1:$MN",0); $k=0; while( list($key,$val) = each($overview)) { $unsorted[$k]["uid"]=$val->uid; $unsorted[$k]["subject"]=MIME::decode($val->subject, NLS::getCharset()); $k++; } usort ($unsorted, create_function('$a,$b','setlocale (LC_ALL,$locale);return strcoll($a["subject"],$b["subject"]);')); for ($m=0;$m<count($unsorted);$m++) array_push($sortresult,$unsorted[$m]["uid"]); if ($reverse) $sortresult = array_reverse($sortresult); return $sortresult; } Usage example: $sorted = imap_locale_sort($stream,SORTSUBJECT,0,'fa_IR',0); ------------------------------------------------------------- With Thanks and Regards Persian-Horde Team

« previous php.i18n (#863) next »