首页 > 解决方案 > 如何按发送日期订购短信

问题描述

我正在使用 twilio 在我的网站上的用户之间发送和接收消息。我可以成功显示入站和发出的短信。

我像这样检索我的消息。

$receivedMessages = $twilio->messages
                         ->read(array(
                                 "from" => $user->phone,
                                 "to" => $siteNumber,
                             )
                         );

     $sentMessages = $twilio->messages
                         ->read(array(
                                 "from" => $siteNumber,
                                 "to" => $user->phone,
                             )
                         );

     $combinedMessages = array_merge($receivedMessages, $sentMessages);

我将 combniedmessage 变量传递给我的视图,然后遍历它们并将不同的样式应用于入站和传出消息。

 <ul class="text-container incoming-container">
           @foreach($combinedMessages as $message)
             <li class="text-message
              @if($message->direction == 'inbound')
                incoming-text
              @elseif($message->direction == 'outbound-api')
                outgoing-text
              @endif">
              <span>
                {{$message->body }}
              </span></br>
              <small>
                {{ (string)$message->dateCreated->format('d-m-Y H:i:s')}}
              </small>
             </li>
          @endforeach
         </ul>

首先显示入站,然后显示出站。无论方向如何,我如何按发送时间的顺序显示它们。

标签: phplaraveltwiliolaravel-blade

解决方案


您需要$combinedMessages使用自定义排序函数对数组进行排序,该函数将按对象的消息日期进行排序。

在此处查看 uasort() 命令:http: //php.net/manual/en/function.uasort.php

<?php
// Sample Comparison function
function cmp($a, $b) {
    if ( $a->message_timestamp == $b->message_timestamp ) {
        return 0;
    }
    return ( $a->message_timestamp < $b->message_timestamp ) ? -1 : 1;
}

uasort( $combinedMessages, 'cmp' );
?>

推荐阅读