2016-05-17 12 views
0

Ich habe eine Reihe von Sprachen, die wie folgt aussieht: (diese Daten von MySQL als gespeicherte gezogen wird: zB Feldwert: griechisch, polnisch)entfernen doppelte Elemente in Array, das Komma haben Trennwerte

Array 
(
[0] => 
[1] => french 
[2] => french, greek 
[3] => german 
[4] => greek 
[5] => greek, polish 
[6] => italian 
[7] => spanish 
[8] => spanish, italian 
[9] => spanish, portuguese 
) 

Ich habe versucht, array_unique ($ Sprachen) zu verwenden, aber die Ausgabe bleibt gleich.

Ich nehme an, es ist wegen des Kommas.

Irgendeine Idee, wie man nur einzigartige Werte hat? z.B. Jeweils eins: französisch, griechisch, deutsch, polnisch, italienisch, spanisch und portugiesisch?

Antwort

2

Machen Sie ein einfaches Array von Eingangs

$res = array(); 
foreach ($array as $item) 
    $res = array_merge($res, explode(', ', $item)); 

und verwenden Sie dann array_unique($res)

+0

Hat sehr gut funktioniert. Vielen Dank. – user2413654

+0

Ich bin froh zu helfen. Viel Glück! – splash58

2
$data = array_map(function ($item) { 
    // explode values by "," and trim spaces 
    return array_map('trim', explode(',', $item)); 
}, $your_data); 

// merge all nested arrays from $data and return unique 
return array_unique(
    call_user_func_array('array_merge', $data); 
); 

Ihr Ergebnis wird sein:

Array 
(
[0] => 
[1] => french 
[2] => greek 
[3] => german 
[4] => polish 
[5] => italian 
[6] => spanish 
[7] => portuguese 
) 
+0

Danke, aber ich endete mit der Antwort von splash58. Ein bisschen weniger Code. – user2413654

+0

@ user2413654. OK. Splash58 hat weniger Code, weil er keine Werte trimmt. – maximkou

1

Mögliche Lösung:

function getUniqueSubValues($array) { 
    $result = []; 
    foreach($array as $element) { 
     $result += preg_split('/\s*,\s*/', $element); 
    } 
    return array_unique($result); 
} 

Ich bin Schleife über alle Werte innerhalb des Arrays und spaltet jede von ihnen weiter in Unterwerte.

Ich benutze preg_split('/\s*,\s*/', ...) statt explode(',', ...) weil sonst der Platz nach dem , behalten würde und wir müssten es trimmen.

Ich bin alle Subvalues ​​in die Ergebnis-Array zusammen, und am Ende gebe ich die eindeutigen Werte dieses Array zurück.

Verwandte Themen