PHP - 如何在多维数组上运行查询?

时间:2016-01-01 01:32:24

标签: php arrays multidimensional-array

PHP多维关联数组与数据库中保存的数据表基本相同,对吧?每行都是一条记录,每列都是(或应该是)相同的数据类型。

有没有办法,也许是函数库,允许我们在这个数据集上运行SQL类型的查询?

具体来说,我希望按任何列排序,并根据条件返回原始数据集的子集(可能在另一个数组中),例如"其中$ filename元素包含字符串' abcdx'"

这是更具体的应用信息。我有一个客户端在他的网站上的子根目录中保存了数千个文件,因此除了具有正确FTP登录名和密码的人之外,任何人都无法访问它们。我的网站上有一个限制访问页面,列出了所有这些文件,并提供了下载链接。我希望能够按文件名,扩展名或大小对列表进行排序(所有这些元素都在数组中),并允许访问者应用过滤器,因此如果他们要查找特定文件,列表将包含只有符合搜索条件的文件。

我正在深入研究创建对象(每个列表),并创建这些对象的数组,但是现在我正在寻找实现这一目标的最佳方法。

我确信我能做到这一点,但毫无疑问,我在这里有人比这更了解这一点,并且可以提供一个优雅,更有效的解决方案,我会结束克隆在一起。所以,提前感谢您提供的任何帮助。

1 个答案:

答案 0 :(得分:2)

  

PHP多维关联数组与数据库中保存的数据表基本相同,对吗?

没有。 PHP实现嵌套数组,而不是多维数组:

$ A [0] [0] = 1;    $ A [1] [1] = 1;

不会导致$ a [0] [1]和$ a [1] [0]的分配。

使用从根数组开始的树搜索来解除引用任何元素。

  

每一行都是一条记录,每列都是(或应该是)相同的数据类型

在关系数据库表中,是的。不在PHP数组中,即使它是多维的。在大多数实现多维数组的语言中,"列"通常必须具有一致的大小,以便通过计算它们的位置来取消引用它们,但它们不必是相同的类型。

  

有没有办法,也许是函数库,允许我们在这个数据集上运行SQL类型的查询?

这需要某种能力来定义任意数据结构,语言解析器或api,并发控制机制,索引功能和大型数据集的缓存,并且考虑到所涉及的代码量无法在运行时有效地重新链接和调用 - 它必须作为守护进程运行。我们已经在关系型DBMS中拥有所有这些功能,例如Postgresql,Oracle,Mariadb ....

至于如何最好地将此问题应用于您的问题,将目录用作数据存储不能很好地适应您描述的操作类型。但是,在不同基材中维护2个数据集并不简单,但如果您已获得系统管理权限并且系统支持通知/回调系统(如inotify),则更容易,但您没有提供任何信息关于平台和特权。

但如果我接受了这项任务,我会先看看像owncloud

这样的工具