【问题标题】:Trying to clear an array with only one occurance试图清除仅出现一次的数组
【发布时间】:2020-06-03 15:00:38
【问题描述】:

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

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
                )

)

谢谢大家的帮助,我是新来的,如果不是很清楚,请多多包涵。

【问题讨论】:

  • “这里是函数的返回” - 这应该是你想要的,还是你目前得到的?我不确定您所说的 “我想清除这个数组,只发生一次,以便用户创建一个只有一个字段的聊天列表,而与他们之间的消息方式无关” 是什么意思,这可以做到以更好的解释开始。
  • 对不起,我会试着解释得更好,我仍然需要提高我的英语^^所以我最终想要的是 ArraytoconvertInjson 包含两个用户之间存在的每个对话的字段
  • 显示输入(你做了) 显示你的代码(你做了) 显示输出(我想你做了) 但最重要的是,(显示你想要的输出) 并描述用于将输入转换为输出的规则
  • 为了你的快速响应,我把我想得到的答案写出来
  • @AnantSingh---AlivetoDie 感谢您的 cmets 和帮助,我是 stackoverflow 的新手 ..

标签: php arrays algorithm


【解决方案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
    ],
];

【讨论】:

  • 非常感谢它的工作,现在我明白为什么我的功能没有了..
猜你喜欢
  • 1970-01-01
  • 2015-09-13
  • 2017-03-12
  • 1970-01-01
  • 2016-01-02
  • 2011-06-13
  • 2016-01-09
  • 1970-01-01
  • 2017-04-02
相关资源
最近更新 更多