Antworten:
Verwenden Sie array_unique () .
Beispiel:
$array = array(1, 2, 2, 3);
$array = array_unique($array); // Array is now (1, 2, 3)
$array = array_unique($array, SORT_REGULAR);
Verwenden array_values(array_unique($array));
array_unique
: für eindeutiges Array
array_values
: für die Neuindizierung
array_unique
gibt ein Objekt mit Schlüssel- und Wertepaaren zurück UND gibt array_values
nur Werte als Array zurück.
//Find duplicates
$arr = array(
'unique',
'duplicate',
'distinct',
'justone',
'three3',
'duplicate',
'three3',
'three3',
'onlyone'
);
$unique = array_unique($arr);
$dupes = array_diff_key( $arr, $unique );
// array( 5=>'duplicate', 6=>'three3' 7=>'three3' )
// count duplicates
array_count_values($dupes); // array( 'duplicate'=>1, 'three3'=>2 )
Das einzige, was für mich funktioniert hat, ist:
$array = array_unique($array, SORT_REGULAR);
Bearbeiten: SORT_REGULAR
Behält die gleiche Reihenfolge wie das ursprüngliche Array bei.
Manchmal array_unique()
ist das nicht der richtige Weg, wenn Sie eindeutige UND duplizierte Artikel erhalten möchten ...
$unique=array("","A1","","A2","","A1","");
$duplicated=array();
foreach($unique as $k=>$v) {
if( ($kt=array_search($v,$unique))!==false and $k!=$kt )
{ unset($unique[$kt]); $duplicated[]=$v; }
}
sort($unique); // optional
sort($duplicated); // optional
Ergebnisse auf
array ( 0 => '', 1 => 'A1', 2 => 'A2', ) /* $unique */
array ( 0 => '', 1 => '', 2 => '', 3 => 'A1', ) /* $duplicated */
Wir können einen solchen Array-Typ erstellen, um diesen letzten Wert zu verwenden. Er wird in einen Spalten- oder Schlüsselwert aktualisiert und erhält einen eindeutigen Wert aus dem Array ...
$array = array (1,3,4,2,1,7,4,9,7,5,9);
$data=array();
foreach($array as $value ){
$data[$value]= $value;
}
array_keys($data);
OR
array_values($data);
explode(",", implode(",", array_unique(explode(",", $YOUR_ARRAY))));
Dies kümmert sich um Schlüsselzuordnungen und serialisiert die Schlüssel für das resultierende neue Array :-)
explode("," $YOUR_ARRAY)
wenn $YOUR_ARRAY
ist array("1", "2", "3")
?
Abhängig von der Größe Ihres Arrays habe ich gefunden
$array = array_values( array_flip( array_flip( $array ) ) );
kann schneller sein als array_unique.
Das ist eine großartige Möglichkeit, dies zu tun. Vielleicht möchten Sie sicherstellen, dass die Ausgabe wieder ein Array ist. Jetzt zeigen Sie nur den letzten eindeutigen Wert an.
Versuche dies:
$arrDuplicate = array ("","",1,3,"",5);
foreach (array_unique($arrDuplicate) as $v){
if($v != "") { $arrRemoved[] = $v; }
}
print_r ($arrRemoved);
if (@!in_array($classified->category,$arr)){
$arr[] = $classified->category;
?>
<?php } endwhile; wp_reset_query(); ?>
Überprüfen Sie den Wert zum ersten Mal im Array und finden Sie den gleichen Wert. Ignorieren Sie ihn
Entfernen Sie doppelte Werte aus einem assoziativen Array in PHP.
$arrDup = Array ('0' => 'aaa-aaa' , 'SKU' => 'aaa-aaa' , '1' => '12/1/1' , 'date' => '12/1/1' , '2' => '1.15' , 'cost' => '1.15' );
foreach($arrDup as $k => $v){
if(!( isset ($hold[$v])))
$hold[$v]=1;
else
unset($arrDup[$k]);
}
Array ([0] => aaa-aaa [1] => 12/1/1 [2] => 1,15)
Es gibt mehrere Möglichkeiten, dies zu tun:
//first method
$filter = array_map("unserialize", array_unique(array_map("serialize", $arr)));
//second method
$array = array_unique($arr, SORT_REGULAR);
Wenn Sie Bedenken hinsichtlich der Leistung haben und ein einfaches Array haben, verwenden Sie:
array_keys(array_flip($array));
Es ist um ein Vielfaches schneller als array_unique.
$a = array(1, 2, 3, 4);
$b = array(1, 6, 5, 2, 9);
$c = array_merge($a, $b);
$unique = array_keys(array_flip($c));
print_r($unique);
$arrDuplicate = array ("","",1,3,"",5);
foreach(array_unique($arrDuplicate) as $v){
if($v != "" ){$arrRemoved = $v; }}
print_r($arrRemoved);
function arrayUnique($myArray)
{
$newArray = Array();
if (is_array($myArray))
{
foreach($myArray as $key=>$val)
{
if (is_array($val))
{
$val2 = arrayUnique($val);
}
else
{
$val2 = $val;
$newArray=array_unique($myArray);
$newArray=deleteEmpty($newArray);
break;
}
if (!empty($val2))
{
$newArray[$key] = $val2;
}
}
}
return ($newArray);
}
function deleteEmpty($myArray)
{
$retArray= Array();
foreach($myArray as $key=>$val)
{
if (($key<>"") && ($val<>""))
{
$retArray[$key] = $val;
}
}
return $retArray;
}
Probieren Sie diesen kurzen und süßen Code aus -
$array = array (1,4,2,1,7,4,9,7,5,9);
$unique = array();
foreach($array as $v){
isset($k[$v]) || ($k[$v]=1) && $unique[] = $v;
}
var_dump($unique);
Ausgabe -
array(6) {
[0]=>
int(1)
[1]=>
int(4)
[2]=>
int(2)
[3]=>
int(7)
[4]=>
int(9)
[5]=>
int(5)
}
if
.
<?php
$arr1 = [1,1,2,3,4,5,6,3,1,3,5,3,20];
print_r(arr_unique($arr1));
function arr_unique($arr) {
sort($arr);
$curr = $arr[0];
$uni_arr[] = $arr[0];
for($i=0; $i<count($arr);$i++){
if($curr != $arr[$i]) {
$uni_arr[] = $arr[$i];
$curr = $arr[$i];
}
}
return $uni_arr;
}
Hier habe ich ein zweites leeres Array erstellt und eine for
Schleife mit dem ersten Array verwendet, das Duplikate enthält. Es wird so oft ausgeführt wie die Anzahl des ersten Arrays. Dann verglichen mit der Position des Arrays mit dem ersten Array und übereinstimmend, dass es dieses Element bereits hat oder nicht, indem es verwendet in_array
. Wenn nicht, wird dieses Element dem zweiten Array mit hinzugefügt array_push
.
$a = array(1,2,3,1,3,4,5);
$count = count($a);
$b = [];
for($i=0; $i<$count; $i++){
if(!in_array($a[$i], $b)){
array_push($b, $a[$i]);
}
}
print_r ($b);
foreach
Schleife?
foreach
weil ich mich mit for-Schleifen sehr wohl fühle. Das ist es.
Dies kann durch die Funktion erfolgen. Ich habe drei Funktionsduplikate erstellt, die die Werte zurückgeben, die im Array doppelt vorhanden sind.
Die zweite Funktion single gibt nur die Werte zurück, bei denen es sich um einzelne Werte handelt, die im Array nicht wiederholt werden, und die dritte und die vollständige Funktion geben alle Werte zurück, werden jedoch nicht dupliziert, wenn ein Wert dupliziert wird. Sie konvertieren ihn in single.
function duplicate($arr) {
$duplicate;
$count = array_count_values($arr);
foreach($arr as $key => $value) {
if ($count[$value] > 1) {
$duplicate[$value] = $value;
}
}
return $duplicate;
}
function single($arr) {
$single;
$count = array_count_values($arr);
foreach($arr as $key => $value) {
if ($count[$value] == 1) {
$single[$value] = $value;
}
}
return $single;
}
function full($arr, $arry) {
$full = $arr + $arry;
sort($full);
return $full;
}
Eine Alternative für die Funktion array_unique ().
Verwenden des Brute-Force-Algorithmus
// [1] Dies ist unser Array mit doppelten Elementen
$ match = ["jorge", "melvin", "chelsy", "melvin", "jorge", "smith"];
// [2] Container für das neue Array ohne doppelte Elemente
$ arr = [];
// [3] Ermittelt die Länge des duplizierten Arrays und setzt sie auf die Variable, die für die for-Schleife verwendet werden soll
$ len = count ($ Übereinstimmungen);
// [4] Wenn der Array-Schlüssel ($ i) übereinstimmt, ist die Iteration der aktuellen Schleife in nicht verfügbar // [4] das Array $ arr drückt dann den aktuellen Iterationsschlüsselwert der Übereinstimmungen [$ i] // [4] zum Array arr.
für ($ i = 0; $ i
if(array_search($matches[$i], $arr) === false){ array_push($arr,$matches[$i]); } } //print the array $arr. print_r($arr); //Result: Array ( [0] => jorge [1] => melvin [2] => chelsy [3] => smith )
Ich habe dies ohne Verwendung einer Funktion getan.
$arr = array("1", "2", "3", "4", "5", "4", "2", "1");
$len = count($arr);
for ($i = 0; $i < $len; $i++) {
$temp = $arr[$i];
$j = $i;
for ($k = 0; $k < $len; $k++) {
if ($k != $j) {
if ($temp == $arr[$k]) {
echo $temp."<br>";
$arr[$k]=" ";
}
}
}
}
for ($i = 0; $i < $len; $i++) {
echo $arr[$i] . " <br><br>";
}
Note that array_unique() is not intended to work on multi dimensional arrays.