代码之家  ›  专栏  ›  技术社区  ›  Jesse Jashinsky

PHP有一套数据结构吗?

  •  9
  • Jesse Jashinsky  · 技术社区  · 14 年前

    我是新来的PHP,我不明白这个基本的问题。PHP有某种set或list对象吗?类似于数组,但能够动态添加或从中移除任意数量的对象。

    6 回复  |  直到 7 年前
        1
  •  7
  •   Mike Dinescu    14 年前

    是的,你可以用 array array functions .

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

        2
  •  6
  •   okdewit    5 年前

    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])
    
        3
  •  5
  •   VolkerK    14 年前

    既然你提到了 Set SplObjectStorage (php 5.3+)。

        4
  •  4
  •   Acsor Łukasz    7 年前

    如果你在找一个 Set 没有重复元素的数据结构,似乎在php7中SPL增加了对 Set 数据结构。

        5
  •  3
  •   Ihor Burlachenko    8 年前

    你可以用 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]);
    
        6
  •  2
  •   Andy Lester    14 年前

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

        7
  •  2
  •   Randy the Dev    14 年前

    只需使用一个php数组,php中没有“固定大小”数组,因此您应该可以使用它们。