PHP如何删除数组中重复的值

有多种方法可以在 PHP 中删除重复的数组值,根据 PHP 版本的不同,有些方法可能不如其他方法有效。

然而,效率只是需要考虑的一件事,正如一再提到的,当我们拥有适当的缓存机制时,通常并不重要。
有时它确实很重要,所以一般来说,我们最好从一开始就使用最好的方法,因为我们可能无法预测何时或者是否有人会在速度真正重要的地方使用代码。

另一件要考虑的事情是由于实施不当而导致的开发人员错误。
一些删除重复数组值的方法可能会导致丢失数字键,这可能会导致错误。
最好尽可能围绕此类问题进行编码。

现在,如果我们只需要删除重复的数组值,并且不关心保留数组键,那么我们可能应该使用 array_key 和 array_flip 的组合,因为一些基准测试表明这是最快的方法。

$some_array = array('array_keys', 'array_keys', 'array_flip', 'array_unique', 'array_search', 'array_values', 'array_unique');
$unique_array = array_keys(array_flip($some_array));
print_r($unique_array);

输出:

Array
(
    [0] => array_keys
    [1] => array_flip
    [2] => array_unique
    [3] => array_search
    [4] => array_values
)

在保留key的同时删除重复项

要保留数组的键,我们可以使用双翻转方法:

$some_array = array('Apple', 'Apple', 'Banana', 'Orange', 'Carrot', 'Carrot', 'Spinach');
$unique_array = array_flip(array_flip($some_array));
print_r($unique_array);

但是,要遍历缺少键的数组,我们应该使用 foreach 而不是 while 和 for 循环:

foreach ($some_array as $key => $value) {
    echo PHP_EOL . $key . ':' . $value;
}

输出

0:Apple
1:Banana
2:Orange
3:Carrot
4:Spinach

这适用于数值数组和关联数组。

日期:2020-06-02 22:15:28 来源:oir作者:oir