【问题标题】:How to efficiently paginate a PHP array?如何有效地对 PHP 数组进行分页?
【发布时间】:2012-03-25 06:07:05
【问题描述】:

我目前有一个使用 URL 参数分页的数组(例如 ....php?page=2&blah=blop&glob=gloo)。

目前,每次页面加载时,都会从查询引擎下载一个 XML 文件,对其进行解析,然后将我想要使用的对象数组提取出来。

如何进行设置,这样我就不必重新加载页面而只需从 XML 文件中读取一次?

我对 PHP 还很陌生,所以请多多包涵。经过一番研究,我认为 Ajax 适合这个吗?如果我错了,请纠正我。我试图找出一些关于使用 Ajax 进行分页的东西,但我发现最有用的东西是用于对来自 mysql 数据库的数据进行分页,而不是用于对象数组。

任何人都可以提供任何指针吗?我渴望学习。

【问题讨论】:

  • 除非您使用某种内存缓存 (memcached),否则每次需要更多数据时都必须读取 xml 文件(或它的某个本地存储版本)。您真正关心的是服务器xml 通信时间还是浏览器服务器通信时间?
  • 我最关心的是在没有页面加载的情况下在一页上进行分页。这是一个移动应用程序,所以我希望界面尽可能精简!

标签: php jquery ajax arrays pagination


【解决方案1】:

当我需要这个时,我创建了一个缓存函数,A) 从原始源加载 XML,然后将其保存到缓存文件夹,或者 B) 如果缓存文件夹存在,则从缓存文件夹加载它,以及其他条件 (像新鲜一样)得到满足。

在一个必须从相当慢的服务器检索数据的站点上,我将 A) 放入一个 cron 作业中,并始终从该网站的缓存中读取。

如果您需要大数据分页,这里有一个很好的例子:http://net.tutsplus.com/tutorials/php/how-to-paginate-data-with-php/

【讨论】:

  • 感谢有关缓存 Matt 的提示。 XML 源将很少更改,因此这是一个好主意。关于分页,我已经编写了自己的 PHP 分页,但我想摆脱页​​面加载,我该怎么做?
  • Matt H 正在描述文件缓存。基本上只在file_exists('path to cache file') 失败时才执行file_get_contents('url to XML')。否则你file_get_contents('path to cache file').
  • 如果您想完全摆脱页面加载,请使用来自@imkingdavid 的以下答案 (AJAX)。您可以通过 AJAX 查询加载每个页面,或者一次将所有数据加载到 JSON 数组中,并在请求时构建页面视图。如果数据量有限,JSON 是可以的,否则一次对多个页面使用 AJAX 加载的组合,保存在 JSON 对象中。
【解决方案2】:

您可以调整您发现的用于处理数据库的 AJAX 来处理您的数据对象,以便页面只加载一次。

【讨论】:

  • 我发现的大多数来源都是指专门用于 MySQL 的分页类:-/
  • 它可能是专门为 MySQL 制作的,但它应该适用于其他类型的数据存储(即 XML)。可以链接到课程吗?
【解决方案3】:

您可以使用 memcached 将 XML 缓存在内存中,也可以将其保存到本地文件并从那里读取。

此外,您可以将其保存为另一种更快的格式(可能是json?)并将其拆分为文件 - 每页一个文件 - 并且只读取您需要的页面的文件。

如果文件是特定于用户的,则其他选项是将其保存在会话中(如果它不是以数组形式太大),或者如果您想将其保存在文件中,则将会话 ID 添加到文件名。

这完全取决于您要对文件及其内容做什么。

【讨论】:

    【解决方案4】:

    您可能对php paginations 的这个课程感兴趣。

    【讨论】:

      猜你喜欢
      • 2010-11-24
      • 2017-06-06
      • 2012-04-22
      • 2015-02-12
      • 1970-01-01
      • 2011-08-24
      • 1970-01-01
      • 2016-11-06
      • 1970-01-01
      相关资源
      最近更新 更多