PHP有内置数据结构吗?

Tho*_*ens 61 php data-structures

我正在查看PHP手册,我没有看到大多数语言都有的数据结构部分,例如列表和集合.我只是盲目或PHP没有这样的内置?

Vin*_*ent 53

PHP中唯一的本机数据结构是数组.幸运的是,数组非常灵活,也可以用作哈希表.

http://www.php.net/array

但是,有一种SPL,它是C++ STL的一种克隆.

http://www.php.net/manual/en/book.spl.php

  • PHP数组实际上是有序字典.它可以用来表示数组,列表,队列,堆栈,树,使用引用甚至图形.更重要的是它更快.你还能想要什么? (8认同)
  • @newday:"有序字典"表示"地图". (2认同)

Fre*_*ald 28

PHP通过标准PHP库(SPL)基本扩展提供数据结构,该扩展在PHP 5.0.0中默认可用并编译.

提供的数据结构可用PHP 5> = 5.3.0,包括:

双重链接列表

双向链表(DLL)是在两个方向上相互链接的节点列表.当底层结构是DLL时,迭代器的操作,对两端的访问,节点的添加或删除都具有O(1)的成本.因此,它为堆栈和队列提供了一个不错的实现.

堆是遵循heap-property的树状结构:当使用对堆是全局的已实现的compare方法进行比较时,每个节点大于或等于其子节点.

数组

数组是以连续方式存储数据的结构,可通过索引访问.不要将它们与PHP数组混淆:PHP数组实际上是作为有序哈希表实现的.

地图

地图是包含键值对的数据结构.PHP数组可以看作是从整数/字符串到值的映射.SPL提供从对象到数据的映射.此映射也可用作对象集.

资料来源:http://php.net/manual/en/spl.datastructures.php


Jos*_*aro 15

关联数组可用于大多数基本数据结构哈希表,队列,堆栈.但是如果你想要像树或堆这样的东西我不认为它们默认存在,但我确信在任何地方都有免费的库.

使数组模拟堆栈用于array_push()添加和array_pop()起飞

使数组模拟队列用于array_push()入队和array_shift()出队

关联数组默认为哈希.在PHP中,允许它们将字符串作为索引,以便按预期工作:

$array['key'] = 'value';
Run Code Online (Sandbox Code Playgroud)

最后,您可以使用可能浪费空间的数组来模拟二叉树.如果你知道你将拥有一棵小树,它会很有用.使用线性数组,您可以说任何索引(i)将其左子项放在索引(2i + 1)而将右子项放在索引(2i + 2).

所有这些方法都在很好地涵盖本文就如何使JavaScript数组效仿更高层次的数据结构.


Ran*_*aLK 8

虽然这个问题已经有8年了,但我发布了一个答案,因为PHP 7引入了一个扩展,称为ds提供专用数据结构作为数组的替代.

ds,

  • 使用Ds\命名空间.
  • 有3个接口,即Collection,SequenceHashable
  • 有8类,即Vector,Deque,Queue,PriorityQueue,Map,Set,Stack,和Pair

有关更多信息,请查看手册以及此博客文章包含一些很棒的信息,包括基准测试.


Kon*_*lph 6

PHP具有实际上是关联数组的数组,也可以用作集合.与许多解释语言一样,PHP在一个引擎盖下提供所有这些,而不是提供不同的显式数据类型.

例如

$lst = array(1, 2, 3);
$hsh = array(1 => "This", 2 => "is a", 3 => "test");
Run Code Online (Sandbox Code Playgroud)

/编辑:另外,请查看手册.


Cor*_*rey 6

PHP的数组兼作列表和字典.

$myArray = array("Apples", "Oranges", "Pears");
$myScalar = $myArray[0] // == "Apples"
Run Code Online (Sandbox Code Playgroud)

或者将它用作关联数组:

$myArray = array("a"=>"Apples", "b"=>"Oranges", "c"=>"Pears");
$myScalar = $myArray["a"] // == "Apples"
Run Code Online (Sandbox Code Playgroud)


Mar*_*kus 5

我想你可能想要更具体一点,当你说数据结构时,我的想法有几个方向......

数组 - 它们肯定有很好的文档记录并且可用。(http://us.php.net/manual/en/book.array.php

SQL 数据 - 取决于您使用的数据库,但大多数都可用。( http://us.php.net/manual/en/book.mysql.php )

OOP - 根据版本对象可以设计和实现。( http://us.php.net/manual/en/language.oop.php ) 我不得不搜索 OOP 才能在 php 站点上找到它。

希望有帮助,如果没有,请见谅。