2008-11-21 20 views

Odpowiedz

189

Użyj array_unique().

przykład:

$array = array(1, 2, 2, 3); 
$array = array_unique($array); // Array is now (1, 2, 3) 
+13

@Ian - 'Należy zauważyć, że array_unique() jest nie jest przeznaczony do pracy w tablicach wielowymiarowych. " –

+13

Powyższe zachowanie zachowuje klucze elementów. Jeśli chcesz je ponownie zindeksować, dodatkowo zastosuj wartości array_values: http://www.php.net/manual/en/function.array-values.php – CodeVirtuoso

+14

perfect ....... 'array_values ​​(array_unique ($ array)) 'robi dla mnie idealną rzecz. Dzięki @Freelancer –

-1

I odbywa się to bez stosowania funkcji.

$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>"; 
} 
2

explode(",", implode(",", array_unique(explode(",", $YOUR_ARRAY))));

To zajmie najważniejszych stowarzyszeń i szeregować klucze do powstałej nowej tablicy :-)

+1

Jaki byłby efekt 'explode (", "$ YOUR_ARRAY)' gdy '$ YOUR_ARRAY' jest 'tablica (" 1 "," 2 "," 3 ")'? – kiamlaluno

+0

@kiamlaluno - :), a odpowiedź brzmi: ** Ostrzeżenie: explode() oczekuje, że parametr 2 będzie ciągiem, tablica podana w ... on line .... ** –

+0

@JesseChisholm Tak, to był punkt, ale nikt najwyraźniej nie zauważył kodu. – kiamlaluno

3
$array = array("Ram","Thiru","Ram","Thiraviya"); 
$array = array_unique($array); 

wyjściowa:

"Ram" "Thiru", "Thiraviya"

+3

Jest to całkowicie bezcelowy duplikat zaakceptowanej odpowiedzi z * 2008 *. –

4

czasami array_unique() nie jest droga, jeśli chcesz uzyskać niepowtarzalny i zduplikowane pozycje ...

$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 

wyniki na

array (0 => '', 1 => 'A1', 2 => 'A2',) /* $unique */ 

array (0 => '', 1 => '', 2 => '', 3 => 'A1',) /* $duplicated */ 
0
$arrDuplicate = array ("","",1,3,"",5); 
foreach(array_unique($arrDuplicate) as $v){ 
    if($v != ""){$arrRemoved = $v; }} 
print_r($arrRemoved); 
+0

Faceci, to byłby mądrzejszy sposób usuwania duplikatów .......... – user1045247

+1

To naprawdę niczego nie wyjaśnia i nie wydaje się być "mądrzejsze". – Sven

+0

Zawsze możesz wyjaśnić, dlaczego edytując swój post, kliknij link "edytuj" na końcu swojej odpowiedzi. Proponuję również zapoznać się z FAQ: http://stackoverflow.com/faq – ForceMagic

21
//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) 
1

To świetny sposób, aby to zrobić. Może chcieć upewnić się, że jego dane wyjściowe powróciły ponownie do tablicy. Teraz wyświetlasz tylko ostatnią niepowtarzalną wartość.

Spróbuj tego:

$arrDuplicate = array ("","",1,3,"",5); 

foreach (array_unique($arrDuplicate) as $v){ 
    if($v != "") { $arrRemoved[] = $v; } 
} 
print_r ($arrRemoved); 
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; 
} 
0

spróbować tej krótkiej & słodki kodu -

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

Wyjście -

array(6) { 
    [0]=> 
    int(1) 
    [1]=> 
    int(4) 
    [2]=> 
    int(2) 
    [3]=> 
    int(7) 
    [4]=> 
    int(9) 
    [5]=> 
    int(5) 
} 
+0

Czy możesz mi wyjaśnić, jak działa ten kod? –

+0

Nadużywanie operatorów boolowskich do sterowania przepływem w ten sposób niepotrzebnie jest mylące. Po prostu użyj 'if'. –

0

ja t może być wykonane za pomocą funkcji i funkcja duplikat funkcji zwraca wartości, które są duplikowane w tablicy. Funkcja druga zwraca tylko te wartości, które są pojedynczą średnią nie powtarzaną w tablicy, a trzecia i pełna funkcja zwracają wszystkie wartości, ale nie są duplikowane, jeśli dowolna wartość jest powielane konwertować go wydzielić

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; 

} 

}

0

zależności od rozmiaru tablicy, znalazłem

$array = array_values(array_flip(array_flip($array))); 

może być szybsze niż array_unique.

+0

Więcej informacji na temat tego, co się tutaj dzieje i czy będzie szybszy przy większej lub mniejszej macierzy. –

+0

Podwójna klapka usunie zduplikowane wartości, ponieważ klucz nie może istnieć dwa razy, w przeciwnym razie zostanie nadpisany. Jeśli dowolna wartość zostanie zduplikowana, a tablica zostanie odwrócona, ostatnim wystąpieniem (zakładam) będzie wartość klucza. – Goldentoa11

+0

W PHP 7 zauważyłem, że przerzucanie tablicy wielowymiarowej więcej niż raz może niespodziewanie zmienić kolejność elementów tablicy. –

1

Jedyną rzeczą, która pracowała dla mnie jest:

$array = array_unique($array, SORT_REGULAR); 
0

Funkcja array_unique zrobi to za Ciebie. Po prostu potrzebne, aby dodać SORT_REGULAR flag

$items_thread = array_unique($items_thread, SORT_REGULAR); 
0
<?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; 
} 
5

Używaj array_values(array_unique($array));

array_unique: dla unikalnej tablicy array_values: dla reindeksowania

0
if (@!in_array($classified->category,$arr)){   
            $arr[] = $classified->category; 
           ?> 

      <?php } endwhile; wp_reset_query(); ?> 

pierwszą wartość sprawdzić czas oczekiwania na tablicy i znalezione ta sama wartość zignoruj ​​to:

2

Możemy stworzyć taki rodzaj tablicy, aby korzystać z tej ostatniej wartości będą aktualizowane w kolumnie lub wartości klucza i będziemy mieli 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); 
0

Aby usunąć zduplikowane wartości z tablicy można wykorzystać array_unique ($ your_array) Funkcja PHP

0

Usuń zduplikowane wartości z tablicy asocjacyjnej w 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)

0
$result = array(); 
foreach ($array as $key => $value){ 
    if(!in_array($value, $result)) 
    $result[$key]=$value; 
} 
Powiązane problemy