Как использовать php imap сортировку для сортировки и извлечения последних 10 сообщений


Я хочу получить последние 10 сообщений из учетной записи gmail и отобразить их на странице. До сих пор у меня есть следующее:

<!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>

Я вижу сообщение здесь Как я могу сортировать массивы и данные в PHP? но мне трудно понять, как сортировать по $обзорам[дата]. rsort или любой другой вид не работает. Как вы указываете, что хотите выполнить сортировку в свойстве [дата]. спасибо.

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>

Все еще получение случайной сортировки при получении электронных писем.

 4
Author: Community, 2015-03-26

1 answers

Вы можете использовать USORT в php

usort($overviews, function($a1, $a2) {
   $v1 = strtotime($a1['date']);
   $v2 = strtotime($a2['date']);
   return $v1 - $v2; // $v2 - $v1 to reverse direction
});
 2
Author: unixmiah, 2015-03-26 18:17:26