2016-09-28 54 views
1

我使用array_unique來擺脫數組中的重複值。但是,問題是array_unique在檢查重複項時不考慮數據類型。例如:php數組唯一類型檢查

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

輸出:

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

但是,如果你考慮數據類型數組的每個值是唯一的。我知道我可以通過運行一個循環來解決這個問題。但是,有沒有更好的方法或替代array_unique我可以實現這一目標?

+0

你將不得不自循環 – nogad

+0

從文檔:*有兩個因素被認爲是平等的,如果並且只有'(string)$ elem1 ===(string)$ elem2' * *。它用於字符串和數字,而不是任意類型。 – Barmar

回答

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); 
?> 

結果:

陣列(7){[0] => INT(1)[5] = > bool(false)[6] => bool(true)[7] => NULL [9] => int(3)[10] => string(2)「hi」[11] => }

它不那麼優雅,可能不那麼快,但似乎工作。

它將只保留數組中的最後一個值。

工作例如:example

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