【问题标题】:How to correctly display a portion of results per page, not all results. (PHP)如何正确显示每页的部分结果,而不是所有结果。 (PHP)
【发布时间】:2013-10-15 17:22:33
【问题描述】:

我正在使用 json_decode 来解码一个长 JSON 文件,并且我想在每页显示 20 个结果。 像这样;

echo ($decodedJson['Workers'][0]['Name'])
echo ($decodedJson['Workers'][1]['Name'])
                  .
                  .

我遇到困难的部分是,在解码所有这些 JSON 之后,当我转到 Page=2 ($page = $_GET["Page"];) PHP 重新执行 json_decode 时,它​​会花费很多时间。我知道这是一个非常菜鸟的问题,但请帮助我。

我如何只解码一次,构造我的对象或数组一次并在每个页面上使用它?

还有其他在页面之间导航的方式吗?我正在使用一个函数来学习当前的 URL,更改“Page=X”部分。并用它回显一个“”。

提前致谢。

【问题讨论】:

  • 我认为这是唯一的方法..

标签: php json


【解决方案1】:

由于 http 的 stateless 特性,您必须在每次请求时对其进行解码。除非你将它持久化到某个地方,以便它可用于下一个请求。

根据数据的性质/结构/范围,您可以将其存储在文件中、(一个或多个)数据库表中或$_SESSION 超全局中。

关于您的第二个问题,您也可以使用$_SESSION,甚至cookies,这样即使用户离开并再次导航,您的脚本也会“记住”用户的页面。

【讨论】:

  • 缓存繁重的操作是个好主意,这(几乎)不会破坏无状态性质)
  • 是的,这就是我提到的 persistance 部分背后的全部概念。
  • 第二个选项是我对 Android 应用程序所做的。它使用了一个大型 XML 文件中的潮汐数据。我编写了一个简短的程序来解析它,将其加载到 SQLite 数据库中,然后将该数据库打包到我的 APK 中。安装和快速查询后没有缓慢的“初始化”。将数据存入数据库将是您最好的朋友。
  • 好吧,这取决于 - 这就是我提到三种不同方式的原因。如果数据相对较小且结构微不足道,则简单的file_put_contents('mycache.tmp',serialize($data)) 就足够直接了。另一方面,如果数据本质上具有会话生命周期,$_SESSION 可能是要走的路。
【解决方案2】:

设置 $_SESSION['data'] = JSON 文件,然后在后续页面上,参考您的会话数据并使用页码来确定您要显示的 JSON 数据的子集。假设每页有 10 个结果,一些逻辑如下:

$start = (pageNum * 10) - 11;
for($i = $start; $i < $start + 10; $i++) {
// process output
}

【讨论】:

  • 我认为,array_slice($_SESSION['data']['Workers'], $pageNum*$pageSize, $pageSize) ($pageNum 从 0 开始) 更适合这项任务
  • 是的,有几种给猫剥皮的方法。我想的是最简单的方法。
猜你喜欢
  • 2015-01-07
  • 2013-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-07
  • 2017-12-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多