PHP数组唯一类型检查


php array unique type check

我使用array_unique来消除数组中的重复值。但是,问题是array_unique在检查重复时不考虑数据类型。例如:

$a = [1, true, null, false];
$u = array_unique($a);
var_dump($u);

输出:

array(2) {
  [0] =>int(1)
  [2] =>NULL
}

但是,如果考虑数据类型,数组的每个值都是唯一的。我知道我可以通过运行循环来解决这个问题。但是,是否有更好的方法或替代array_unique,我可以实现这一点?

我想出了这个似乎有效的解决方案:

<?php
function array_really_unique($array){
    foreach ($array as $key => $item){
        foreach ($array as $key2 => $item2)
            if ($key2 != $key && $item2 === $item)
                unset($array[$key]);
    }
    return $array;
}
$a = [1, true, null, false, false, false, true, null, 2, 3, "hi", 2];
$u = array_really_unique($a);
var_dump($u);
?>
结果:

阵列(7){[0]=> int (1) [5] => bool(假)[6]=> bool(真正的)[7]=>零[9]=> int(3)[10] =>字符串(2)"hi" [11]=> int(2)}

它不是那么优雅,可能也不是那么快,但似乎行得通。

它将只保留数组中的最后一个值。

工作示例:example

我很无聊

$a = ['test',1, true, null, false,null,'test',true];
function arrayUnique($a)
{
    $u=array();
    foreach ($a as $k => $v) {
        if(!in_array($v,$u,TRUE)){
          $u[]=$v;  
        }
    }
        return $u;
}
var_dump(arrayUnique($a));
输出:

array(5) { [0]=> string(4) "test" [1]=> int(1) [2]=> bool(true) [3]=> NULL [4]=> bool(false) }