有一个网站。我将用户的聊天存储为每个聊天的单个json文件。因此,当用户请求聊天列表时,php脚本读取存储聊天的目录,并返回聊天数组。数组按最后消息日期排序。
显然,我不需要撤回聊天,但每页:前10个聊天,然后接下来10个聊天。但是每次聊天都会被分类,这让我很困惑。
我如何使每页取回其他更简单的清单:
还有一个产品目录(它是一家商店)。
考虑一个包含“id”字段的json对象数组。在前端用户请求第一页中,服务器返回数组的前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);发布于 2022-07-03 10:29:39
我目前所设想的唯一解决方案是下一个:
与我的问题中的情况不同,服务器返回的元素范围从指定的参数元素到接下来的10个元素,即(指定的,specified+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);
}https://stackoverflow.com/questions/72599320
复制相似问题