2010-11-04 10 views
5

Zdaję sobie sprawę, że mogę używać array_unique(array_merge($a,$b));

scalić dwie tablice, a następnie usunąć wszystkie duplikaty,

ale

ma indywidualną funkcją, która zrobi to za mnie?

(Wiem, że mógłbym napisać samemu, który po prostu je wywołuje, ale ja się tylko zastanawiam).

+0

Cheers Chłopaki, Po prostu byłem ciekawy, czy istnieje funkcja php, więc nie musiałbym wywoływać innej funkcji w tablicy (może to być całkiem duży). – Hailwood

+1

Jeśli jednak po prostu napiszesz funkcję, więc nie piszesz 'array_unique (array_merge (...)), pamiętaj, że' array_merge() 'może przyjąć więcej niż 2 argumenty. Po prostu myśl :) – BoltClock

Odpowiedz

6

Nie ma takiej funkcji. Języki programowania ogólnie dają pewien zestaw narzędzi (funkcji), a następnie można je łączyć w celu uzyskania pożądanych rezultatów.

Naprawdę nie ma sensu tworzenie nowej funkcji dla każdego przypadku użycia, chyba że jest to bardzo powszechny przypadek użycia - a twój nie wydaje się taki.

+0

zaakceptuje za 5 minut. – Hailwood

+0

Istnieje wiele funkcji tablicowych, inne się nie liczą ... Myślenie o 'tablicach' jako' sets' i 'merge' jako o" union ", cóż, to powszechne. – Vili

+0

PHP jest właśnie jednym z języków, który ma wiele pomocniczych metod, które nie są naprawdę całkowicie potrzebne, ale nadal są bardzo przydatne. Bardziej niż jakikolwiek inny język, jaki znam. – OMA

0

Domyślnie nie ma. Możesz to zrobić w inny sposób (co może nie być aż tak mądre)

$array1 = array('abc', 'def'); 
$array2 = array('zxd', 'asdf'); 

$newarray = array_unique(array($array1, $array2)); 

robi coś podobnego. Zastanawiasz się, dlaczego nie napisałeś wystarczająco dobrze?

+0

'tablica (tablica (/ * niektóre dane * /), tablica (/ * inne dane * /))' nie jest taka sama jak 'array_merge()' w ogóle: 'array merge()' łączy wszystkie wartości tablic w jedną tablicę; 'array()' po prostu łączy tablice jako wartości w jedną tablicę. Przez proxy, 'array_unique' nie robi tego, co próbuje osiągnąć OP. – pinkgothic

+0

@pinkgothic, więc o co ci chodzi? –

+0

Po prostu twoja odpowiedź nie jest tym, co OP stara się osiągnąć (i nie robi "tego samego", tak), więc nie jest odpowiedzią na ich problem. Tworzenie wielowymiarowych tablic z 'tablica()' może być wnikliwe dla kogoś w ogóle (<- mówię poważnie), ale nie w zakresie tego pytania. Patrząc jak to miejsce przypomina trochę encyklopedię Q & A, warto zaznaczyć, że twoja odpowiedź nie pasuje. – pinkgothic

0
//usage $arr1=array(0=>"value0", 1=>"value1", 2=>"value2"); $arr2=array(0=>"value3", 1=>"value4", 2=>"value0") => $result=mergeArrays($arr1,$arr2); $result=Array ([0] => value0 [1] => value1 [2] => value2 [3] => value3 [4] => value4) 

function mergeArrays() { 
    $result=array(); 
    $params=func_get_args(); 
    if ($params) foreach ($params as $param) { 
     foreach ($param as $v) $result[]=$v; 
    } 
    $result=array_unique($result); 
    return $result; 
} 
0

w PHP 5.6+ można również wykorzystać nowy argument rozpakowywania uniknąć wielu połączeń array_merge (które znacznie przyspieszyć swój kod): https://3v4l.org/arFvf

<?php 

$array = [ 
    [1 => 'french', 2 => 'dutch'], 
    [1 => 'french', 3 => 'english'], 
    [1 => 'dutch'], 
    [4 => 'swedish'], 
]; 

var_dump(array_unique(array_merge(...$array))); 

Wyjścia:

array(4) { 
    [0]=> 
    string(6) "french" 
    [1]=> 
    string(5) "dutch" 
    [3]=> 
    string(7) "english" 
    [5]=> 
    string(7) "swedish" 
} 
Powiązane problemy