我正在查看PHP手册,我没有看到大多数语言都有的数据结构部分,例如列表和集合.我只是盲目或PHP没有这样的内置?
PHP中唯一的本机数据结构是数组.幸运的是,数组非常灵活,也可以用作哈希表.
http://www.php.net/array
但是,有一种SPL,它是C++ STL的一种克隆.
http://www.php.net/manual/en/book.spl.php
PHP通过标准PHP库(SPL)基本扩展提供数据结构,该扩展在PHP 5.0.0中默认可用并编译.
提供的数据结构可用PHP 5> = 5.3.0,包括:
双向链表(DLL)是在两个方向上相互链接的节点列表.当底层结构是DLL时,迭代器的操作,对两端的访问,节点的添加或删除都具有O(1)的成本.因此,它为堆栈和队列提供了一个不错的实现.
SplDoublyLinkedList类
SplStack类
SplQueue类
堆是遵循heap-property的树状结构:当使用对堆是全局的已实现的compare方法进行比较时,每个节点大于或等于其子节点.
SplHeap类
SplMaxHeap类
SplMinHeap类
SplPriorityQueue类
数组是以连续方式存储数据的结构,可通过索引访问.不要将它们与PHP数组混淆:PHP数组实际上是作为有序哈希表实现的.
SplFixedArray类
地图是包含键值对的数据结构.PHP数组可以看作是从整数/字符串到值的映射.SPL提供从对象到数据的映射.此映射也可用作对象集.
SplObjectStorage类
资料来源:http://php.net/manual/en/spl.datastructures.php
关联数组可用于大多数基本数据结构哈希表,队列,堆栈.但是如果你想要像树或堆这样的东西我不认为它们默认存在,但我确信在任何地方都有免费的库.
使数组模拟堆栈用于array_push()
添加和array_pop()
起飞
使数组模拟队列用于array_push()
入队和array_shift()
出队
关联数组默认为哈希.在PHP中,允许它们将字符串作为索引,以便按预期工作:
$array['key'] = 'value';
最后,您可以使用可能浪费空间的数组来模拟二叉树.如果你知道你将拥有一棵小树,它会很有用.使用线性数组,您可以说任何索引(i)将其左子项放在索引(2i + 1)而将右子项放在索引(2i + 2).
所有这些方法都在很好地涵盖本文就如何使JavaScript数组效仿更高层次的数据结构.
虽然这个问题已经有8年了,但我发布了一个答案,因为PHP 7引入了一个扩展,称为ds
提供专用数据结构作为数组的替代.
的ds
,
使用Ds\
命名空间.
有3个接口,即Collection
,Sequence
和Hashable
有8类,即Vector
,Deque
,Queue
,PriorityQueue
,Map
,Set
,Stack
,和Pair
有关更多信息,请查看手册以及此博客文章包含一些很棒的信息,包括基准测试.
PHP具有实际上是关联数组的数组,也可以用作集合.与许多解释语言一样,PHP在一个引擎盖下提供所有这些,而不是提供不同的显式数据类型.
例如
$lst = array(1, 2, 3); $hsh = array(1 => "This", 2 => "is a", 3 => "test");
/编辑:另外,请查看手册.
PHP的数组兼作列表和字典.
$myArray = array("Apples", "Oranges", "Pears"); $myScalar = $myArray[0] // == "Apples"
或者将它用作关联数组:
$myArray = array("a"=>"Apples", "b"=>"Oranges", "c"=>"Pears"); $myScalar = $myArray["a"] // == "Apples"