2016-09-28 4 views
1

Ich verwende array_unique, um die doppelten Werte in einem Array loszuwerden. Aber das Problem ist array_unique berücksichtigt Datentypen nicht beim Überprüfen auf Duplikate. Zum Beispiel:php array eindeutiger Typprüfung

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

Ausgänge:

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

Aber, wenn Sie Datentypen berücksichtigen ist jeder Wert des Arrays einzigartig. Ich weiß, dass ich das beheben kann, indem ich eine Schleife durchführe. Aber gibt es einen besseren Weg oder eine Alternative zu array_unique, mit denen ich das erreichen kann?

+0

Sie benutzerdefinierte Schleife – nogad

+0

Aus der Dokumentation haben: * Zwei Elemente werden als gleich, wenn und nur wenn '(string) $ elem1 === (string) $ elem2' *. Es ist für Strings und Zahlen gedacht, nicht für willkürliche Typen. – Barmar

Antwort

1

kam ich mit dieser Lösung, die zu funktionieren scheint:

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

Ergebnis:

array (7) {[0] => int (1) [5] = > bool (falsch) [6] => bool (wahr) [7] => NULL [9] => int (3) [10] => string (2) "hi" [11] => int (2) }

Es ist nicht so elegant und ist wahrscheinlich nicht so schnell, aber scheint zu arbeiten .

Es wird nur der letzte Wert im Array beibehalten.

Arbeitsbeispiel: example

1

i gebohrt wurde :)

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

Ausgang:

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