PHP 8.4.1 Released!

imap_sort

(PHP 4, PHP 5, PHP 7, PHP 8)

imap_sortメッセージヘッダの配列をソートする

説明

imap_sort(
    IMAP\Connection $imap,
    int $criteria,
    bool $reverse,
    int $flags = 0,
    ?string $search_criteria = null,
    ?string $charset = null
): array|false

指定したパラメータにより取得したメッセージ番号をソートします。

パラメータ

imap

IMAP\Connection クラスのインスタンス。

criteria

criteria は、次のどれかとします (ひとつのみ)。

  • SORTDATE - メッセージの日付
  • SORTARRIVAL - 到着日付
  • SORTFROM - 最初の From アドレスのメールボックス
  • SORTSUBJECT - メッセージ Subject
  • SORTTO - 最初の To アドレスのメールボックス
  • SORTCC - 最初の cc アドレスのメールボックス
  • SORTSIZE - メッセージのサイズ(バイト単位)

reverse

逆順にソートするかどうかを指定します。

flags

flags はビットマスクで、以下の組み合わせとなります。

  • SE_UID - シーケンス番号の代わりに UID を返す
  • SE_NOPREFETCH - 検索したメッセージを事前取得しない

search_criteria

IMAP2 フォーマットの検索条件文字列。詳細は imap_search() を参照ください。

charset

文字列の検索の際に使う MIME 文字セット。

戻り値

指定したパラメータでソートしたメッセージ番号の配列を返します。 失敗した場合に false を返します

変更履歴

バージョン 説明
8.1.0 引数 imap は、IMAP\Connection クラスのインスタンスを期待するようになりました。 これより前のバージョンでは、有効な imap リソース が期待されていました。
8.0.0 reverse の型が、int から bool に変更されました。
8.0.0 search_criteria, charset は、 nullable になりました。
add a note

User Contributed Notes 1 note

up
9
antoine dot spam-nono at maxg dot info
18 years ago
I worked a lot with IMAP functions since I wrote a complete webmail and I've got a little tip about the imap_sort function :

There is a big difference between :

<?php
imap_sort
($imap, SORTDATE, 1);
// and
imap_sort($imap, SORTARRIVAL, 1);
?>

The first command will issue a
>> FETCH 1:last (UID ENVELOPE BODY.PEEK[HEADER.FIELDS (Newsgroups Content-MD5 Content-Disposition Content-Language Content-Location Followup-To References)] INTERNALDATE RFC822.SIZE FLAGS)

While the second resulted in
>> FETCH 1:last (UID INTERNALDATE RFC822.SIZE FLAGS)

As a result, using SORTDATE took 3 seconds longer to complete on a 800-emails mailbox, while the results are quite the same (except if you have to deal with forged dates or timezones, but the arrival order is far more logical)

My advice if you sort your emails by arrival is to actually use SORTARRIVAL, or better don't use imap_sort and go straight with message numbers (not UIDs). On large mailboxes, if you display messages per page, you will have significant performance increases (by avoiding 5 seconds of sorting).
To Top