PHP使用数组键存储数据

时间:2016-07-20 16:39:24

标签: php arrays internal internals

假设我需要添加和删除数组中必须唯一的元素。

Class A {
    protected $elements = [];

    function add($element) {
        if (!in_array($element, $this->elements)) {
            $this->elements[] = $element;
        }
    }

    function remove($element) {
        if (($key = array_search($element, $this->elements)) !== false) {
            unset($this->elements[$key]);
        }
    }
}

这看起来很好,但是如果$elements中包含大量元素,则每次调用add()remove()时,PHP都需要进行迭代。相反,我可以这样做:

Class A {
    protected $elements = [];

    function add($element) {
        $this->elements[$element] = true;
    }

    function remove($element) {
        unset($this->elements[$element]);
    }
}

无论元素数量多少,哪个都应该以相同的速度执行,但我可能完全错了,这就是这个问题的重点。

我在我的代码中一直都在这样做,但是我正在困扰我,我存储了一堆无用的信息(在这个例子中有些true布尔),这些信息绝对没有用,但不能去没有他们。这看起来像某种缺陷,让我觉得这种方法并不像我想象的那样完全是防弹的。

这种在数组中存储信息的方式是否比我认为的正确的方式更好,第一个例子并没有任何缺点,除了存储不必要的信息?

1 个答案:

答案 0 :(得分:1)

您的第二个解决方案将明显快于第一个解决方案。

缺点是它将占用更多内存,并且您只能存储整数和字符串。

如果您在相当多的元素上添加/删除了很多 - 那么请使用第二种解决方案。

如果您期待数十万甚至数百万个元素 - 那么第二个解决方案可能会出现内存不足的情况 - 所以您应该使用第一个。