我使用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
我能做到这一点?
答案 0 :(得分:1)
我提出了这个似乎有效的解决方案:
<?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);
?>
结果:
array(7){[0] =&gt; int(1)[5] =&gt; bool(false)[6] =&gt; bool(true)[7] =&gt; NULL [9] =&gt; int(3)[10] =&gt; string(2)&#34; hi&#34; [11] =&GT; int(2)}
它不那么优雅,可能不那么快,但似乎有用。
它只保留数组中的最后一个值。
工作示例:example
答案 1 :(得分:1)
我很无聊:))
$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) }