# Doppelte Einträge eines Arrays löschen



## Raverss (19. Juni 2004)

Hi, 

ich habe 2 Fragen.

1. Wie kann ich doppelte Einträge in einem Array löschen?

wenn also folgendes Array vorhanden wäre:

a
b
c
a

Dann sollte das letzte a gelöscht werden.

2. Wie kann ich Einträge in einem Array löschen, die irgend etwas nicht enthalten (z. B. das @ wenn es um email addys geht)?

Danke schonmal im voraus für alle Antworten


----------



## Tim C. (19. Juni 2004)

> _Original geschrieben von Raverss _
> *1. Wie kann ich doppelte Einträge in einem Array löschen?*


[phpf]array_unique[/phpf]



> *2. Wie kann ich Einträge in einem Array löschen, die irgend etwas nicht enthalten (z. B. das @ wenn es um email addys geht)?*


Spontan würde ich sagen, eine eigene Funktion schreiben, die das Array Element für Element mit einer foreach Schleife durchgeht und die validen Elemente in eine neues Array schreibt, welches dann der Rückgabewert der Funktion ist.


----------



## wal (20. Juli 2004)

Hallo allerseits,

hier möchte ich mich nochmal an diesen Thread dranhängen, damit ich keinen neuen eröffnen muss.

Ich habe das mit dem array_unique umgesetzt und es läuft auch soweit. Jetzt habe ich nur das Problem, dass der Index mit in das neue Array übernommen wird.

Also soetwas:

```
...
$media_unique = array_unique($media_all);
print_r ($media_unique);
echo $media_unique[1594];
...
```

Ergebnis:

```
Array ( [0] => Audio-CD [23] => Audio-CD mit Begleit [25] => Buch [1526] => Buch, Audio-CD [1528] => Buch, Audio-CD, Kass [1529] => Buch, CD [1560] => CD-ROM [1590] => DVD [1594] => Kassette [1597] => Spiel [1602] => Video ) 
Kassette
```

Nun meine Frage:
Kann ich im $media_unique - Array den Index korrigieren?

Damit es wie folgt ausschaut:

```
$media_unique[0] = Audio-CD 
$media_unique[1] = Audio-CD mit Begleit 
$media_unique[2] = Buch
etc.
...
```

Vielen Dank schon mal für eure Hilfen.


----------



## ludz (20. Juli 2004)

Vielleicht nicht wirklich performant und eventuell gibts da auch schon was eigenes in PHP, aber das sollte es nach array_unique() tun:

```
function rectify_keys($array) {
    foreach ($array as $arr) {
        $new_arr[] = $arr;
    }
    return $new_arr;
}

$media_unique = rectify_keys($media_unique);
```


----------



## wal (20. Juli 2004)

Hi ludz,

wunderbar ... funktioniert bestens!  

Vielen Dank!


----------



## JeSchnell (8. September 2009)

hi,
auch wenn das Thema veraltet ist, wollte ich noch etwas dazu sagen. Statt der Möglichkeit mit der Funktion zur Neuindexisierung gäbe es eine bessere Möglichkeit: (nicht getestet, aber sollte klappen)

```
<?php
  $Array = array('a','b','a');
  $Array = array_unique($Array);
  $Array = array_values($Array);
?>
```

Zur 2. Frage hätte ich auch noch einen Vorschlag: (getestet):

```
<?php
  $Array = array('korrekte@email.de','inkorrekte#email.bayern','korrekte@email.at');
  $Array = preg_grep('/@/',$Array);
  $Array = array_values($Array);
?>
```

Natürlich gäbe es auch eine Möglichkeit die Schlüssel eines Arrays auszulesen: array_keys()

lg JeSchnell


----------

