如何使用php imap_sort对最近10条消息进行排序和检索

时间:2015-03-26 14:46:13

标签: php imap

我想从gmail帐户中检索最后10封邮件并将其显示在页面中。到目前为止,我有以下内容:

<!DOCTYPE html>
<html lang="en">
<head>
<link href="css/bootstrap.min.css" rel="stylesheet">
    <!--    <!--[if lt IE 9]>
            <script src="//html5shim.googlecode.com/svn/trunk/html5.js"></script>
        <![endif]-->
    <link href="css/styles.css" rel="stylesheet">

<!--<link rel="stylesheet" href="mail.css"/> -->

</head>

<body>
<?php

ini_set('display_errors',1);
ini_set('display_startup_errors',1);
error_reporting(-1);
/* connect to gmail */
$user = '*****';
$password = '*********';
$mailbox = "{imap.gmail.com:993/imap/ssl}INBOX";

?>

<?php
$mbx = imap_open($mailbox , $user , $password);

/*imap_check returns information about the mailbox
including mailbox name and number of messages*/
//$check = imap_check($mbx);


/* grab emails */
$emails = imap_search($mbx, 'SINCE "10 Mar 2015"');

/* if emails are returned, cycle through each... */
if($emails) {

    /* begin output var */
    $output = '';


?>

<table class="table table-bordered table-hover">

 <tr> 
        <th>From</th>
        <th>Date</th>
        <th>Subject</th>
 </tr>

<?php    




    /* for every email... */
    foreach($emails as $email_number) {
       /* get information specific to this email */
        $overviews = imap_fetch_overview($mbx,$email_number,0);


/*imap_fetch_overview returns an overview for a message.
An overview contains information such as message subject,
sender, date, and if it has been seen. Note that it does
not contain the body of the message. Setting the second
parameter to "1:n" will cause it to return a sequence of messages*/

//$overviews = imap_fetch_overview($mbx,"1:{$check->Nmsgs}");
?>





<?php
 /* put the newest emails on top.Doesnt work.*/
 //   rsort($overviews);
 rsort($overviews);
 print_r($overviews);
foreach($overviews as $overview)
{
?>



     <tr>
          <td><?php echo $overview->from; ?></td>
          <td><?php echo $overview->date; ?></td>
          <td><a href="open.php?id=<?php echo $overview->uid; ?>"><?php echo $overview->subject; ?></a></td>
     </tr>
     <?php

   }
 }     

}
?>
</table>

</body>
</html>

我在这里看到了帖子How can I sort arrays and data in PHP?,但我很难理解如何对$概述进行排序[日期]。 rsort或任何其他类型无效。如何指定要对[date] property.thanks进行排序。

P.S。这是数组:

Array ( [0] => stdClass Object ( [subject] => Fwd: A Short Course  STI #4653 [from] => Fran ***8olo [to] => Fran ****lo [date] => Tue, 10 Mar 2015 12:42:46 GMT [message_id] => <-7376330247335926430@unknownmsgid> [size] => 28928 [uid] => 1532 [msgno] => 743 [recent] => 0 [flagged] => 0 [answered] => 0 [deleted] => 0 [seen] => 0 [draft] => 0 [udate] => 1425991366 ) )

使用usort更新代码:

<?php

/* grab emails */
$emails = imap_search($mbx, 'SINCE "10 Mar 2015"');

/* if emails are returned, cycle through each... */
if($emails) {

    /* begin output var */
    $output = '';


?>

<table class="table table-bordered table-hover">

 <tr> 
        <th>From</th>
        <th>Date</th>
        <th>Subject</th>
 </tr>

<?php    




    /* for every email... */
    foreach($emails as $email_number) {
       /* get information specific to this email */
        $overviews = imap_fetch_overview($mbx,$email_number,0);


/*imap_fetch_overview returns an overview for a message.
An overview contains information such as message subject,
sender, date, and if it has been seen. Note that it does
not contain the body of the message. Setting the second
parameter to "1:n" will cause it to return a sequence of messages*/

//$overviews = imap_fetch_overview($mbx,"1:{$check->Nmsgs}");
?>





<?php
 /* put the newest emails on top.Doesnt work.*/
 //   rsort($overviews);
 usort($overviews, function($a1, $a2) {
   $v1 = strtotime($a1['date']);
   $v2 = strtotime($a2['date']);
   return $v1 - $v2; // $v2 - $v1 to reverse direction
});

 print_r($overviews);
foreach($overviews as $overview)
{
?>



     <tr>
          <td><?php echo $overview->from; ?></td>
          <td><?php echo $overview->date; ?></td>
          <td><a href="open.php?id=<?php echo $overview->uid; ?>"><?php echo $overview->subject; ?></a></td>
     </tr>
     <?php

   }
 }     

}
?>
</table>

当我检索电子邮件时,仍然会进行随机排序。

2 个答案:

答案 0 :(得分:2)

你可以在php中使用USORT

usort($overviews, function($a1, $a2) {
   $v1 = strtotime($a1['date']);
   $v2 = strtotime($a2['date']);
   return $v1 - $v2; // $v2 - $v1 to reverse direction
});

答案 1 :(得分:1)

我修复了它,只需使用 PHP 内置的 rsort() 函数即可。

<?php rsort($emails); ?>