首页 > 解决方案 > 试图清除仅出现一次的数组

问题描述

所以情况是这样的:我有一个包含用户之间消息的数组,->

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
                )

)

谢谢你们的帮助,如果不是很清楚,我是新来的。

标签: phparraysalgorithm

解决方案


我不是 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
    ],
];

推荐阅读