你好,
我们在之前的代码 (imap_locale_sort) 中使用了 MIME 和 NLS 库,
它们是 PEAR 和 Horde 项目的一部分,因此我们的函数
非常具体。下面是此函数的一般(纯 PHP)代码
function
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"]=imap_utf8($val->subject);
$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;
}
示例用法
$mbox = imap_open("{localhost:143}INBOX.sent-mail","userid","password");
if ($mbox)
echo ("连接成功!");
$sorted = imap_locale_sort($mbox,SORTSUBJECT,0,'fa_IR',0);
print_r($sorted);
print ("\n\n");
$sorted = imap_sort($mbox,SORTSUBJECT,SE_UID);
print_r($sorted);
imap_close($mbox);