PHP有一个Set数据结构吗?

时间:2010-09-21 21:54:26

标签: php set

我是PHP的新手,我无法弄清楚这个基本问题。 PHP有某种set或list对象吗?类似于数组的东西,但能够动态添加或删除任意数量的对象。

7 个答案:

答案 0 :(得分:7)

是的,您可以使用array对象和array functions

基本上,您可以使用array_push函数或$arrayName[] = ...表示法(其中arrayName是数组的名称)动态增长数组。

答案 1 :(得分:4)

由于您在问题标题中提到了“Set对象”(即如果您需要在集合中不重复这些对象),请查看SplObjectStorage(php 5.3+ )。

答案 2 :(得分:3)

只使用一个php数组,在PHP中没有“固定大小”数组这样的东西,所以你应该没问题。

答案 3 :(得分:3)

您可以使用Set中的Nspl。它支持基本的集合操作,它将其他集合,数组和可遍历对象作为参数:

$set = set(1, 2);

$set->add('hello');
$set[] = 'world';

$set->delete('hello');

$array = [1, 2, 3];
$intersection = $set->intersection($array);

$anotherSet = Set::fromArray([1, 2, 3]);
$difference = $set->difference($anotherSet);

$iterator = new \ArrayIterator([1, 2, 3]);
$union = $set->union($iterator);

$isSubset = $set->isSubset([1, 2, 'hello', 'world']);

$isSuperset = $set->isSuperset([1, 2]);

答案 4 :(得分:3)

如果您正在寻找没有重复元素的Set数据结构,那么从PHP 7开始,SPL似乎增加了对Set数据结构的支持。

答案 5 :(得分:2)

PHP的数组就像一个由数字索引的有序数组的混搭,以及一个哈希查找表。您可以通过字符串索引查找任何元素,但元素也有定义的顺序。

答案 6 :(得分:1)

PHP7 +答案:使用官方的PHP-DS扩展。它比使用阵列的骇客解决方案要有效得多。集合有一些限制,但是对它们的大多数典型操作都快得多,并且提供了更好的界面。

https://www.php.net/manual/en/book.ds.php

<?php

use Ds\Set;

$numbers = new Set([1, 2, 3]);

$numbers->sum(); 

$numbers->diff(new Set([2, 3, 4]))
    ->union(new Set([3, 4, 5]))
    ->remove(...[3, 4])