合并两个数组以形成一个新数组并在其中执行操作

时间:2018-08-03 12:13:59

标签: php arrays laravel

我的数据库中有一个名为Messages的表,其结构如下:

id | sender_id | receiver_id | message | sent_at

在这里,idprimary keysender_idreceiver_idforeign keysmessagetext和{ {1}}是sent_at。现在,我有一个名为datetime的文件,它将使用户能够接收和发送消息。但是,如果我以逐行方式显示所有消息,那么看起来就不好了。因此,我计划创建一个messages.blade.php,其中一列将是flex,另一列将是Users。我打算做的是,每当用户单击某个特定用户时,都需要显示该用户发送或接收的消息。为此,我有以下php代码:

Messages

但是我完全空白处开始介绍这些东西。我要解决的问题是:

  • 从第一个消息变量中提取所有user_id并从中找出公用的user_id
  • 从第二个消息变量中提取所有user_id并从中找出公用的user_id
  • 最后结合user_id和find唯一ID的数组。 那么我应该如何开始呢?我该怎么解决这个问题?

1 个答案:

答案 0 :(得分:1)

您应该初始化两个新数组($ sent和$ received),它们分别由sender_id和receiver_id索引。然后,您可以遍历$ messagesSentByMe和$ messagesReceivedByMe数组,并将消息添加到这些数组。 例如

$sent = [];
$received = [];

foreach($messagesSentByMe as $message) {
    $receiver = $message['receiver_id'];

    // Initialize new array containing messages sent to a user
    if (!array_key_exists($receiver, $sent)) {
        $sent[$receiver] = [];
    }

    // Add message sent to user to the array
    array_push($sent[$receiver], $message);    
}

此代码将按发送每条消息的用户将$ messagesSentByMe分组,您可以对$ messagesReceivedByMe进行相同操作。

我不确定100%的意思是您的最终意思,但是我认为您的目的是列出用户与其他人之间的个人对话。您将可以通过使用array_merge和sort函数(可能通过'sent_at'进行排序)来实现这一目标,请参见http://php.net/manual/en/book.array.php

希望我已经为您指明了正确的方向。