php数组唯一类型检查

时间:2016-09-28 23:52:43

标签: php arrays

我使用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我能做到这一点?

2 个答案:

答案 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) }