@Ian -Note that array_unique() is not intended to work on multi dimensional arrays.
Peter Ajtai
18
Powyższe spowoduje zachowanie kluczy elementów. Jeśli chcesz, aby zostały ponownie zindeksowane, dodatkowo zastosuj array_values: php.net/manual/en/function.array-values.php
CodeVirtuoso
3
To nie zadziałało dla mnie uprzejmie użyj: $array = array_unique($array, SORT_REGULAR);
iniravpatel
@PeterAjtai: Dziękuję za wyróżnienie w sekcji komentarzy. Zaoszczędziło mi to dużo czasu.
Nana Partykar
29
Posługiwać się array_values(array_unique($array));
array_unique: dla unikalnej tablicy
array_values: do ponownego zindeksowania
Możemy stworzyć taki typ tablicy, aby ta ostatnia wartość została zaktualizowana do kolumny lub wartości klucza i otrzymamy unikalną wartość z tablicy ...
$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);
Więcej informacji o tym, co się tutaj dzieje i czy byłoby szybciej z większą lub mniejszą tablicą.
Fi Horan
Podwójne przerzucenie usunie zduplikowane wartości, ponieważ klucz nie może istnieć dwa razy, w przeciwnym razie zostanie nadpisany. Jeśli jakakolwiek wartość zostanie zduplikowana, a tablica zostanie odwrócona, ostatnim wystąpieniem (zakładam) będzie wartość klucza.
Goldentoa 11
W PHP 7 zauważyłem, że przewracanie wielowymiarowej tablicy więcej niż raz może nieoczekiwanie zmienić kolejność elementów tablicy.
Josh Habdas
1
To świetny sposób na zrobienie tego. Może chcieć upewnić się, że jego dane wyjściowe są ponownie w tablicy. Teraz pokazujesz tylko ostatnią unikalną wartość.
Najszybszym sposobem osiągnięcia tego jest użycie funkcji array_flip wbudowanej w PHP [1]. array_flip zamieni wartości tablicy z ich kluczami, a ponieważ tablica nie może mieć zduplikowanych kluczy, otrzymasz unikalny zestaw kluczy, które odpowiadają wartościom oryginalnej tablicy. Aby pobrać te klucze jako wartości, możesz użyć funkcji array_keys do pobrania swoich unikalnych wartości. Zarówno array_flip, jak i array_keys są funkcjami O (n) w najgorszym przypadku, podczas gdy tablica_unique ma w najgorszym przypadku O (n log (n)). [2]
pawan kumar
1
Dodaj więcej wyjaśnień do swojej odpowiedzi (nie w sekcji komentarzy!). W jaki sposób podany kod usuwa zduplikowane wartości z pojedynczej tablicy? Dlaczego potrzebujesz do tego dwóch tablic?
Nico Haase,
Witamy w StackOverflow! Widzę, że dodałeś jakieś wyjaśnienie w komentarzach do swojej odpowiedzi. Byłoby pomocne, gdybyś dodał te informacje jako część samej odpowiedzi.
Możesz użyć pojedynczej tablicy z zduplikowanymi elementami. Miałem problem z uzyskaniem wartości z dwóch tablic w jedną, a następnie usunięcie duplikatów.
To naprawdę niczego nie wyjaśnia i nie wydaje się być „mądrzejsze”.
Sven
Zawsze możesz wyjaśnić, dlaczego edytując swój post, po prostu kliknij link „edytuj” na końcu odpowiedzi. Proponuję również zajrzeć do FAQ: stackoverflow.com/faq
ForceMagic
0
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;}
Umieszczanie w pętli licznika ($ arr) jest dość powolne
Kiruahxh
0
Tutaj utworzyłem drugą pustą tablicę i użyłem forpętli z pierwszą tablicą, która ma duplikaty. Będzie działać tyle razy, ile liczy pierwsza tablica. Następnie porównuje się z pozycją tablicy z pierwszą tablicą i dopasowuje, czy ma już ten element, czy nie, przy użyciu in_array. Jeśli nie, to doda ten element do drugiej tablicy z array_push.
Czy możesz podzielić się jakimś wyjaśnieniem na temat tego kodu? Na przykład, dlaczego nie używasz foreachpętli?
Nico Haase
Jest to rodzaj robienia i dlaczego nie używałem, foreachponieważ czuję się dobrze z pętlą for. Otóż to.
Aladin Banwal,
Niemniej jednak powinieneś podzielić się pewnymi wyjaśnieniami z kodem. Umieszczanie takich odpowiedzi na SO nie jest dobrym stylem: mogą przyjść ludzie z tym samym problemem co OP i powinni być w stanie zrozumieć, w jaki sposób Twój kod rozwiązuje problem, tak aby mogli się z niego nauczyć i dostosować go do swoich potrzeb
Nico Haase,
0
Można to zrobić za pomocą funkcji, którą wykonałem w trzech zduplikowanych funkcjach, zwraca wartości, które są zduplikowane w tablicy.
Druga funkcja pojedyncza zwraca tylko te wartości, które są pojedynczą średnią, która nie jest powtarzana w tablicy, a trzecia i pełna funkcja zwraca wszystkie wartości, ale nie jest zduplikowana, jeśli jakakolwiek wartość jest zduplikowana, konwertuje ją na pojedynczą;
Jaki jest sens odpowiadania na to pytanie za pomocą tablicy array_unique 11 lat po pierwotnej odpowiedzi, która jest dokładnie taka?
Dylan Kas,
0
Alternatywa dla funkcji array_unique ().
Korzystanie z algorytmu Brute force
// [1] To nasza tablica ze zduplikowanymi elementami
$ match = ["jorge", "melvin", "chelsy", "melvin", "jorge", "smith"];
// [2] Kontener dla nowej tablicy bez żadnych zduplikowanych elementów
$ arr = [];
// [3] pobierz długość zduplikowanej tablicy i ustaw ją na zmienną len do użycia w pętli for
$ len = liczba (dopasowania $);
// [4] Jeśli pasuje do klucza tablicy ($ i), iteracja pętli bieżącej nie jest dostępna w
// [4] tablica $ arr, a następnie wstaw bieżącą wartość klucza iteracji dopasowań [$ i]
// [4] do tablicy arr.
dla ($ 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
)
Note that array_unique() is not intended to work on multi dimensional arrays.
$array = array_unique($array, SORT_REGULAR);
Posługiwać się
array_values(array_unique($array));
array_unique
: dla unikalnej tablicyarray_values
: do ponownego zindeksowaniaźródło
array_unique
zwraca obiekt z parami klucz i wartość ORAZarray_values
zwraca tylko wartości jako tablicę.źródło
Jedyne, co mi zadziałało, to:
Edycja:
SORT_REGULAR
zachowuje tę samą kolejność oryginalnej tablicy.źródło
źródło
czasami
array_unique()
nie sposób, jeśli chcesz uzyskać unikalne ORAZ zduplikowane przedmioty ...wyniki na
źródło
Możemy stworzyć taki typ tablicy, aby ta ostatnia wartość została zaktualizowana do kolumny lub wartości klucza i otrzymamy unikalną wartość z tablicy ...
źródło
explode(",", implode(",", array_unique(explode(",", $YOUR_ARRAY))));
To zajmie się skojarzeniami kluczy i serializuje klucze dla powstałej nowej tablicy :-)
źródło
explode("," $YOUR_ARRAY)
kiedy$YOUR_ARRAY
jestarray("1", "2", "3")
?W zależności od rozmiaru twojej tablicy, znalazłem
może być szybsza niż tablica_unique.
źródło
To świetny sposób na zrobienie tego. Może chcieć upewnić się, że jego dane wyjściowe są ponownie w tablicy. Teraz pokazujesz tylko ostatnią unikalną wartość.
Spróbuj tego:
źródło
po raz pierwszy sprawdzić wartość w tablicy i znaleźć tę samą wartość, zignoruj ją
źródło
Usuń zduplikowane wartości z tablicy asocjacyjnej w PHP.
Tablica ([0] => aaa-aaa [1] => 12/1/1 [2] => 1,15)
źródło
Można to zrobić na wiele sposobów, które są następujące
źródło
Jeśli zależy Ci na wydajności i masz prostą tablicę, użyj:
Jest wielokrotnie szybszy niż array_unique.
źródło
źródło
źródło
źródło
wypróbuj ten krótki i słodki kod -
Wynik -
źródło
if
.źródło
Tutaj utworzyłem drugą pustą tablicę i użyłem
for
pętli z pierwszą tablicą, która ma duplikaty. Będzie działać tyle razy, ile liczy pierwsza tablica. Następnie porównuje się z pozycją tablicy z pierwszą tablicą i dopasowuje, czy ma już ten element, czy nie, przy użyciuin_array
. Jeśli nie, to doda ten element do drugiej tablicy zarray_push
.źródło
foreach
pętli?foreach
ponieważ czuję się dobrze z pętlą for. Otóż to.Można to zrobić za pomocą funkcji, którą wykonałem w trzech zduplikowanych funkcjach, zwraca wartości, które są zduplikowane w tablicy.
Druga funkcja pojedyncza zwraca tylko te wartości, które są pojedynczą średnią, która nie jest powtarzana w tablicy, a trzecia i pełna funkcja zwraca wszystkie wartości, ale nie jest zduplikowana, jeśli jakakolwiek wartość jest zduplikowana, konwertuje ją na pojedynczą;
źródło
ref: Demo
źródło
Alternatywa dla funkcji array_unique ().
Korzystanie z algorytmu Brute force
źródło
Zrobiłem to bez użycia żadnej funkcji.
źródło