Php 试图清除仅出现一次的数组
所以情况是这样的:我得到了一个数组,其中包含用户之间的消息,->Php 试图清除仅出现一次的数组,php,arrays,algorithm,Php,Arrays,Algorithm,所以情况是这样的:我得到了一个数组,其中包含用户之间的消息,-> Array ( [0] => Array ( [id_message] => 17 [id_user_sending] => 4 [id_user_receiving] => 2 [date] => 2020-02-19 01:03:50 [content]
Array
(
[0] => Array
(
[id_message] => 17
[id_user_sending] => 4
[id_user_receiving] => 2
[date] => 2020-02-19 01:03:50
[content] => yo !!
[msg_read] => 1
)
[1] => Array
(
[id_message] => 18
[id_user_sending] => 4
[id_user_receiving] => 2
[date] => 2020-02-19 01:03:50
[content] => yo !!
[msg_read] => 1
)
[2] => Array
(
[id_message] => 16
[id_user_sending] => 4
[id_user_receiving] => 2
[date] => 2020-02-19 01:03:48
[content] => yo
[msg_read] => 1
)
[3] => Array
(
[id_message] => 15
[id_user_sending] => 4
[id_user_receiving] => 1
[date] => 2020-02-19 01:03:44
[content] => kk
[msg_read] => 1
)
[4] => Array
(
[id_message] => 14
[id_user_sending] => 4
[id_user_receiving] => 3
[date] => 2020-02-19 01:03:27
[content] => hey
[msg_read] => 1
)
[5] => Array
(
[id_message] => 13
[id_user_sending] => 4
[id_user_receiving] => 2
[date] => 2020-02-19 01:03:22
[content] => salut !
[msg_read] => 1
)
[6] => Array
(
[id_message] => 12
[id_user_sending] => 4
[id_user_receiving] => 1
[date] => 2020-02-19 00:47:50
[content] => yo ?
[msg_read] => 1
)
[7] => Array
(
[id_message] => 11
[id_user_sending] => 3
[id_user_receiving] => 4
[date] => 2020-02-19 00:47:27
[content] => hey dernier test !
[msg_read] => 1
)
[8] => Array
(
[id_message] => 10
[id_user_sending] => 2
[id_user_receiving] => 4
[date] => 2020-02-19 00:47:17
[content] => yo eksjsjs !
[msg_read] => 1
)
[9] => Array
(
[id_message] => 9
[id_user_sending] => 1
[id_user_receiving] => 4
[date] => 2020-02-19 00:47:05
[content] => salut !
[msg_read] => 1
)
)
所连接用户的ID为4
我希望只出现一次就清除这个数组,以便根据用户(id 4)创建一个只包含一个字段的聊天列表,而不考虑它们之间的消息
所以我编写了两个函数,其中有一个问题-->
这里返回函数rend\u moi\u une\u occurrence\u par\u conv,因此我优先选择$arraytoconvertinJson-->
我很确定我在函数中的状态还不太好,但是24小时后我在寻求帮助
这是我想要的返回,所以连接的用户的id是4,我想要得到一个mult数组,其中包含他和他自己以及他和其他用户之间的最后一条消息
Array
(
[0] => Array
(
[id_message] => 19
[id_user_sending] => 4
[id_user_receiving] => 2
[date] => 2020-02-19 13:01:53
[content] => yo
[msg_read] => 1
)
[1] => Array
(
[id_message] => 11
[id_user_sending] => 3
[id_user_receiving] => 4
[date] => 2020-02-19 00:47:27
[content] => hey dernier test !
[msg_read] => 1
)
[2] => Array
(
[id_message] => 15
[id_user_sending] => 1
[id_user_receiving] => 4
[date] => 2020-02-19 00:47:27
[content] => hey dernier test !
[msg_read] => 1
)
[3] => Array
(
[id_message] =>
[id_user_sending] => 4
[id_user_receiving] => 4
[date] => 2020-02-19 00:47:27
[content] => hey dernier test !
[msg_read] => 1
)
)
这是我想要的返回,所以连接的用户的id是4,我想要得到一个mult数组,其中包含他和他自己以及他和其他用户之间的最后一条消息(这不是一个有效的输出,我只是修改id user sending/receiving的值作为示例)。
-->
谢谢你们的帮助,我是新来的,所以如果不是很清楚的话,请告诉我。我不是100%确定你们在问什么,但这是为了获取发送给用户的最新消息
function getLatestMessages(array $messages, $receiverId) {
$times = [];
$chats = [];
foreach ($messages as $message) {
if ($message['id_user_receiving'] === $receiverId) {
$senderId = $message['id_user_sending'];
if (!isset($times[$senderId])) {
$times[$senderId] = 0;
}
$date = new DateTime($message['date']);
$unix = $date->getTimestamp();
if ($unix > $times[$senderId]) {
$times[$senderId] = $unix;
$chats[$senderId] = $message;
}
}
}
return $chats;
}
要获取每个人向用户3发送的最新消息,请执行以下操作:
getLatestMessages($messages, 3);
结果:
Array
(
[1] => Array
(
[id_message] => 12
[id_user_sending] => 1
[id_user_receiving] => 3
[date] => 2020-02-19 09:03:50
[content] => Last message from user 1 to user 3
[msg_read] => 1
)
[2] => Array
(
[id_message] => 77
[id_user_sending] => 2
[id_user_receiving] => 3
[date] => 2020-02-19 10:03:50
[content] => Only message from user 2 to user 3
[msg_read] => 1
)
)
这是我使用的样本数据
$messages = [
[
'id_message' => 17,
'id_user_sending' => 1,
'id_user_receiving' => 1,
'date' => '2020-02-19 01:03:50',
'content' => 'Only message from user 1 to user 1',
'msg_read' => 1
],
[
'id_message' => 53,
'id_user_sending' => 3,
'id_user_receiving' => 1,
'date' => '2020-02-19 02:03:50',
'content' => 'First message from user 3 to user 1',
'msg_read' => 1
],
[
'id_message' => 32,
'id_user_sending' => 3,
'id_user_receiving' => 1,
'date' => '2020-02-19 03:03:50',
'content' => 'Last message from user 3 to user 1',
'msg_read' => 1
],
[
'id_message' => 72,
'id_user_sending' => 2,
'id_user_receiving' => 2,
'date' => '2020-02-19 04:03:50',
'content' => 'Only message from user 2 to user 2',
'msg_read' => 1
],
[
'id_message' => 4,
'id_user_sending' => 1,
'id_user_receiving' => 2,
'date' => '2020-02-19 05:03:50',
'content' => 'Only message from user 1 to user 2',
'msg_read' => 1
],
[
'id_message' => 82,
'id_user_sending' => 3,
'id_user_receiving' => 2,
'date' => '2020-02-19 06:03:50',
'content' => 'Only message from user 3 to user 2',
'msg_read' => 1
],
[
'id_message' => 145,
'id_user_sending' => 1,
'id_user_receiving' => 3,
'date' => '2020-02-19 07:03:50',
'content' => 'First message from user 1 to user 3',
'msg_read' => 1
],
[
'id_message' => 31,
'id_user_sending' => 1,
'id_user_receiving' => 3,
'date' => '2020-02-19 08:03:50',
'content' => 'Second message from user 1 to user 3',
'msg_read' => 1
],
[
'id_message' => 12,
'id_user_sending' => 1,
'id_user_receiving' => 3,
'date' => '2020-02-19 09:03:50',
'content' => 'Last message from user 1 to user 3',
'msg_read' => 1
],
[
'id_message' => 77,
'id_user_sending' => 2,
'id_user_receiving' => 3,
'date' => '2020-02-19 10:03:50',
'content' => 'Only message from user 2 to user 3',
'msg_read' => 1
],
];
“这里是函数的返回”-这应该是你想要的,还是你目前得到的?我不确定你所说的“我想通过一次事件清除此数组,以便用户创建一个仅包含一个字段的聊天列表,与他们之间的消息方式无关”,这可以从更好的解释开始。抱歉,我将尝试更好地解释这一点,我仍然需要提高我的英语水平^^^所以我希望在期末考试中,ArraytoconvertInjson为两个用户之间的每个对话都包含一个字段。输入(你做过)如何显示代码(你做过)显示输出(我想你做过),但最重要的是,(显示你想要的输出)并描述用于将输入转换为输出的规则,以便快速响应,我会给出我想要的答案get@AnantSingh---AlivetoDie谢谢你的评论和帮助,我是stackoverflow的新手。非常感谢你的工作,现在我明白为什么我的功能没有了。。
getLatestMessages($messages, 3);
Array
(
[1] => Array
(
[id_message] => 12
[id_user_sending] => 1
[id_user_receiving] => 3
[date] => 2020-02-19 09:03:50
[content] => Last message from user 1 to user 3
[msg_read] => 1
)
[2] => Array
(
[id_message] => 77
[id_user_sending] => 2
[id_user_receiving] => 3
[date] => 2020-02-19 10:03:50
[content] => Only message from user 2 to user 3
[msg_read] => 1
)
)
$messages = [
[
'id_message' => 17,
'id_user_sending' => 1,
'id_user_receiving' => 1,
'date' => '2020-02-19 01:03:50',
'content' => 'Only message from user 1 to user 1',
'msg_read' => 1
],
[
'id_message' => 53,
'id_user_sending' => 3,
'id_user_receiving' => 1,
'date' => '2020-02-19 02:03:50',
'content' => 'First message from user 3 to user 1',
'msg_read' => 1
],
[
'id_message' => 32,
'id_user_sending' => 3,
'id_user_receiving' => 1,
'date' => '2020-02-19 03:03:50',
'content' => 'Last message from user 3 to user 1',
'msg_read' => 1
],
[
'id_message' => 72,
'id_user_sending' => 2,
'id_user_receiving' => 2,
'date' => '2020-02-19 04:03:50',
'content' => 'Only message from user 2 to user 2',
'msg_read' => 1
],
[
'id_message' => 4,
'id_user_sending' => 1,
'id_user_receiving' => 2,
'date' => '2020-02-19 05:03:50',
'content' => 'Only message from user 1 to user 2',
'msg_read' => 1
],
[
'id_message' => 82,
'id_user_sending' => 3,
'id_user_receiving' => 2,
'date' => '2020-02-19 06:03:50',
'content' => 'Only message from user 3 to user 2',
'msg_read' => 1
],
[
'id_message' => 145,
'id_user_sending' => 1,
'id_user_receiving' => 3,
'date' => '2020-02-19 07:03:50',
'content' => 'First message from user 1 to user 3',
'msg_read' => 1
],
[
'id_message' => 31,
'id_user_sending' => 1,
'id_user_receiving' => 3,
'date' => '2020-02-19 08:03:50',
'content' => 'Second message from user 1 to user 3',
'msg_read' => 1
],
[
'id_message' => 12,
'id_user_sending' => 1,
'id_user_receiving' => 3,
'date' => '2020-02-19 09:03:50',
'content' => 'Last message from user 1 to user 3',
'msg_read' => 1
],
[
'id_message' => 77,
'id_user_sending' => 2,
'id_user_receiving' => 3,
'date' => '2020-02-19 10:03:50',
'content' => 'Only message from user 2 to user 3',
'msg_read' => 1
],
];