从数组PHP取消/删除重复元素

时间:2018-11-25 08:29:08

标签: php mysql

我有一个消息表,用于存储用户之间的消息。使用以下信息,我将根据用户显示消息,并在用户单击加载时显示更多带有偏移量的消息:

        $offset      = $_POST['offset'];
        $limit       = 10;

$stmt = $db_con->query("SELECT sender,recipient,sending_time,read_time,CASE WHEN LENGTH(content) > 7 THEN CONCAT(substring(content, 1, 49), '...') ELSE content END content,recipient_status FROM messages WHERE (sender='admin' OR recipient='admin') ORDER BY sending_time DESC LIMIT $offset,$limit");
            $stmt->execute();
            $db_messages = $stmt->fetchAll(PDO::FETCH_ASSOC);
        $total_posts = ceil($db_count("messages","id","WHERE (sender='admin' OR recipient='admin')","")[0]);
        $MSGS_array  = array();
        $MSGS        = '';          
        $posts       = abs($offset-$limit);

        foreach($db_messages as $key => $value) {
            if($value['sender']=='admin'){$my = $value['recipient']; }else if ($value['recipient']=='admin'){ $my =$value['sender']; }else { $my=$value['sender'];}
            $messages[] = array("user"=>$my,"sending_time"=>$value['sending_time'],"read_time"=>$value['read_time'],"content"=>$value['content'],"recipient_status"=>$value['recipient_status']);   
        }
        foreach ($messages as $message) {
            $MSGS_array[$message['user']] = $message;
        }
        $non_unique_users = array_filter(array_count_values(array_column($messages, 'user')), function ($v) { return $v != 1; });
        $duplicates = array_filter($messages, function ($v) use($non_unique_users) { return array_key_exists($v['user'], $non_unique_users); });
        //setcookie("username", "John Carter", time()+30*24*60*60);
        foreach($MSGS_array as $key => $message){
            $MSGS   .= '<li><a id="'.$message['user'].'" class="view-headerMSG list-group-item b-rad-0 p10 b0 m0"><div class="online-users pull-left mr5"><img src="../uploads/userprofile/default/avatar.jpg" onerror="this.onerror=null;imgDefault(this);" alt="avatar" class="online-users-img"><span title="online"></span></div><strong class="text-primary h4 mb2">'.$message['user'].'<small class="pull-right">'.$ToReadableTime('@'.$message['sending_time']).'</small></strong><div><small class="text-muted">'.$message['content'].'</small></div></a></li>';
        }
        echo json_encode(['MSGS' => $MSGS,"posts" => $posts,"total_posts" => $total_posts,"duplicates"=>$MSGS_array]);

代码是什么?

在页面加载时,ajax请求发送到php以获取偏移量为0且限制为10的消息。 1st foreach循环创建一个数组,而 2nd foreach删除重复项具有关键的“用户”。

但是,当我单击“加载更多”时,将提取接下来的10条消息(如在第一次提取中,已删除重复的消息,并且已将重复/删除的键和值存储在 $ duplicates 中)。这些消息还包含已获取并附加到消息框的那些消息。

我脑海中的逻辑是,第一次获取(即偏移量为0)时,应将 $ duplicates 存储在cookie中,然后在偏移量大于0的情况下进行获取(例如10),则应使用array_merge将cookie值与$ messages数组合并,然后将类似的值未设置 /删除,这是我不知道如何处理的部分我可以取消吗?

OR

有什么方法可以将cookie值(多维数组)与$ MSGS_array进行比较,从中删除重复的值,并且在比较中,我们可以执行取消设置/删除 strong>相似的关键和价值?

有什么建议吗?

0 个答案:

没有答案