聊天列表撤回逻辑



有一个网站。我将用户的聊天记录存储为每个聊天的单个json文件。因此,当用户请求聊天列表时,php脚本读取存储聊天的目录并返回聊天数组。数组按上次消息日期排序。

显然,我不需要撤回聊天,而是每个页面:前10个聊天,然后是接下来的10个聊天。但是聊天记录每次都是排序的,这让我很困惑。

如何为其他更简单的列表设置每页撤回:

还有一个产品目录(它是一个商店)。

考虑一个json对象数组,每个对象都有" id "字段。当前端用户请求第一个页面时,服务器返回数组的前10个元素。前端存储最后一个元素的id。

然后,当第二个页面需要加载时,前端调用相同的请求,但现在也传递最后一个元素id。现在服务器将不再返回从0到10的元素,而是从id->index + 1到id->index + 11。

如何与聊天数组,其中顺序总是在变化?

// example of catalog items withdraw
$a = json_decode(‘[{“id”:1640}, {“id”:5292},{“id”:3720}]’, true); // order is constant
$last = ‘’;
$ok = true;
if(isset($_GET[“last”]))
{
$last = $_GET[“last”];
$ok = false;
}
$ret = [];
for($i = 0; $i < count($a) && count($ret) < 10; $i++)
if(!$ok && $a[$i][“i”] == $last)
$ok = true;
else
$ret[count($ret)] = $a[$i];
echo json_encode($ret);

我目前唯一的解决方案是下一个:

而不是从我的问题的情况下,服务器返回元素的范围从指定的参数元素到下一个10个元素,即(指定,指定+10],在聊天的情况下,它需要总是从第一个返回到指定的页面,而不是元素。

默认返回元素[0,10]。当前端用户向下滚动聊天列表时,客户端将发出相同的请求,但将page=2作为参数传递,服务器将返回元素[0,20)等。

所以,是的,如果到达第30页,可能会有麻烦,但是,最初的问题是解决了重载,因为只有前10个,然后是前20个等等元素将被传递和渲染。

if(isset($_GET["chats"]) && isset($_GET["page"]))
{
// Initialize, get user data, get array of chats
$a = json_decode(‘[{}, {}, {}]’, true); // An array of already sorted by last message date chats
$result = [];
$page = intval($_GET[“page”]);
if(!$page)
$page = 1;
$max = 10;
for($i = 0; $i < count($a) && $i < $page * $max; $i++)
$result[$i] = $a[$i];
echo json_encode($result, JSON_UNESCAPED_UNICODE);
}

最新更新