📜  数组唯一的 php (1)

📅  最后修改于: 2023-12-03 14:55:00.467000             🧑  作者: Mango

数组唯一的 PHP

在编写 PHP 程序时,我们经常需要处理数组。有时候,我们会遇到数组中包含重复的值的情况,这时候我们就需要将数组中的重复值去除,只保留唯一的值。本文将介绍几种方法来实现数组唯一化的操作。

使用 array_unique() 函数

PHP 内置了一个 array_unique() 函数,可以用于去除数组中重复的值。这个函数接受一个数组作为参数,返回一个新的数组,其中只包含原始数组中唯一的值。

<?php
$array = ["apple", "banana", "orange", "banana", "pear", "orange"];
$uniqueArray = array_unique($array);
print_r($uniqueArray);
?>

输出结果为:

Array
(
    [0] => apple
    [1] => banana
    [2] => orange
    [4] => pear
)

可以看到,array_unique() 函数已经成功去除了 $array 中重复的值。

使用 array_keys() 和 array_flip() 函数

array_unique() 函数使用了哈希表来对数组中的值进行唯一化,因此对于大型的数组,这个函数可能会带来一些性能问题。另一种方法是使用 array_flip() 函数将数组中的键和值翻转,然后使用 array_keys() 函数返回翻转后的数组的键名,从而实现唯一化的效果。

<?php
$array = ["apple", "banana", "orange", "banana", "pear", "orange"];
$uniqueArray = array_keys(array_flip($array));
print_r($uniqueArray);
?>

输出结果为:

Array
(
    [0] => apple
    [1] => banana
    [2] => orange
    [3] => pear
)

array_unique() 函数相比,这个方法更快,但是有一个限制:数组中的值必须是可哈希的。如果数组中包含非标量的值(例如数组或对象),这个方法将无法正确工作。

使用循环遍历数组

最后一种方法是使用循环遍历数组,手动实现唯一化的逻辑。具体地,我们可以使用两个数组来实现,一个数组 $uniqueArray 用于存储唯一的值,另一个数组 $tempArray 用于在遍历时暂存已经出现过的值。遍历原始数组,如果当前值在 $tempArray 中已经存在,就跳过,否则将其加入到 $uniqueArray 中并同时加入到 $tempArray 中。最终得到的 $uniqueArray 就是唯一化后的结果。

<?php
$array = ["apple", "banana", "orange", "banana", "pear", "orange"];
$uniqueArray = [];
$tempArray = [];
foreach ($array as $value) {
    if (!in_array($value, $tempArray)) {
        $uniqueArray[] = $value;
        $tempArray[] = $value;
    }
}
print_r($uniqueArray);
?>

输出结果为:

Array
(
    [0] => apple
    [1] => banana
    [2] => orange
    [3] => pear
)

这个方法可以处理任意类型的值,但是对于大型的数组,其性能不如前两个方法。

总结

在 PHP 中实现数组唯一化的操作,可以使用 array_unique() 函数、array_keys()array_flip() 函数以及手动遍历数组三种方法。具体使用哪种方法取决于数组的大小、类型以及性能要求。