2013-05-04 19 views
6

Jak mogę usunąć duplikaty w tablicy?Jak usunąć duplikaty w tablicy?

Na przykład, gdybym miał następującą tablicę:

$array = array('1','1','2','3'); 

chcę go stać

$array = array('2','3'); 

więc chcę go usunąć całą wartość, jeśli dwa z nich znajdują

+0

http://php.net/array_count_values ​​<- Chciałbym najpierw napisać coś z tą funkcją. Zlicza przynajmniej częstotliwość użycia jednej wartości. Ładnie wpisane. – hakre

+0

Zapoznaj się z http://stackoverflow.com/questions/369602/how-to-delete-an-element-from-an-array-in-php – bestprogrammerintheworld

Odpowiedz

4

zależności od wersji PHP, to powinno działać we wszystkich wersjach PHP> = 4.0.6, gdyż nie wymaga anonimowych funkcje, które wymagają PHP> = 5.3:

function moreThanOne($val) { 
    return $val < 2; 
} 


$a1 = array('1','1','2','3'); 
print_r(array_keys(array_filter(array_count_values($a1), 'moreThanOne'))); 

DEMO (Zmiana wersji PHP w listy rozwijanej, aby wybrać wersję PHP używasz)

To działa, ponieważ:

  1. array_count_values przejdzie przez tablicę i utworzy indeks dla każdej wartości i zwiększy go za każdym razem, gdy napotka go ponownie.
  2. array_filter spowoduje utworzenie utworzonej tablicy i przekazanie jej przez zdefiniowaną wcześniej funkcję moreThanOne, jeśli zwróci ona false, para klucz/wartość zostanie usunięta.
  3. array_keys odrzuci część tablicy , tworząc tablicę z wartościami, które są zdefiniowanymi kluczami. Ten ostatni krok daje wynik, który usuwa wszystkie wartości, które istniały więcej niż jeden raz w oryginalnej tablicy.
+2

Funkcje anonimowe zostały wprowadzone w 5.3 –

+0

Dobrze, więc zmodyfikuj " nie tylko PHP 5.4 "będzie" dla PHP> 4.0.6 "^^ – Jon

+0

Działałoby to również w wersji 4.0.6, kiedy to wprowadzono' array_filter' :) –

2

Wypróbuj ten kod,

<?php 
    $array = array('1','1','2','3'); 

foreach($array as $data){ 
    $key= array_keys($array,$data); 
    if(count($key)>1){ 

    foreach($key as $key2 => $data2){ 
    unset($array[$key2]); 
     } 
    } 
    } 
    $array=array_values($array); 
    print_r($array); 


?> 

Wyjście

Array ([0] => 2 [1] => 3) 
4

Można je odfiltrować użycie array_count_values():

$array = array('1','1','2','3'); 
$res = array_keys(array_filter(array_count_values($array), function($freq) { 
    return $freq == 1; 
})); 

Funkcja zwraca tablicę zawierającą oryginalne wartości i ich odpowiednie częstotliwości; następnie wybierasz tylko pojedyncze częstotliwości. Wynik końcowy uzyskuje się, pobierając klucze.

Demo

1

Usuń zduplikowane wartości z tablicy.

array_unique($array) 

$array = array(4, "4", "3", 4, 3, "3"); 
$result = array_unique($array); 
print_r($result); 

/* 
    Array 
    (
     [0] => 4 
     [2] => 3 
    ) 
    */ 
Powiązane problemy