我使用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) }