php - 试图清除仅出现一次的数组
问题描述
所以情况是这样的:我有一个包含用户之间消息的数组,->
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)只有一个字段,而与他们之间的消息方式无关。
所以我编写了两个函数,我遇到了问题---->
function is_not_yet_in_array($arraymult, $arraysimple)
{
$i = 0;
$j = 0;
while (isset($arraymult[$i]))
{
// this conditions isnt correct I still dont know why
if ( ($arraymult[$i]['id_user_sending'] == $arraysimple['id_user_sending'])
|| ($arraymult[$i]['id_user_receiving'] == $arraysimple['id_user_receiving']))
return 0;
$i++;
}
return 1;
}
function rend_moi_une_occurence_par_conv($raw_message)
{
$array = array();
$i = 0;
$j = 0;
while (isset($raw_message[$i]))
{
if (is_not_yet_in_array($array, $raw_message[$i]) == 1)
{
$array[$j] = $raw_message[$i];
$j++;
}
$i++;
}
return ($array);
}
$arraytoconvertinJson = rend_moi_une_occurence_par_conv($raw_message);
这里是函数rend_moi_une_occurencence_par_conv的返回,所以我将$arraytoconvertinJson-->>
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
)
)
我很确定我在函数中的状态还不是很好,但是在 24 小时后我正在寻找一些帮助..
这是我想要的回报,所以连接的用户的 id 是 4,我想要一个包含他和他自己以及他和其他用户之间的最后一条消息的多数组。
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 用户发送/接收示例)。-->
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
)
)
谢谢你们的帮助,如果不是很清楚,我是新来的。
解决方案
我不是 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
],
];
推荐阅读
- javascript - TypeError: obj[key].includes 不是函数:在过滤器函数中
- javascript - 从 img 元素的 src 属性中的 blob URL 获取数据
- javascript - 如何为新数组(整数)使用动态数字?
- php - Laravel - 在数据库中存储动态选项的问题?
- php - 如何在数组中使用 for 循环
- javascript - 如何使用Javascript为有序列表中的每个项目分配一个值
- node.js - child 的 child 里面的 where 子句
- python - 列表 append() 不附加用户输入
- java - Java 异步客户端,意外行为
- woocommerce - 在 WooCommerce 中删除审核订单标题(您的订单)的操作