HOWTO · PHP
Doppelte Werte aus einem Array in PHP entfernen
Dieser Artikel stellt vor, wie man doppelte Werte aus einem Array in PHP entfernt. Er beinhaltet die Funktion array_unique().
Auf dieser Seite
Um wiederholte Werte aus einem PHP-Array zu entfernen, rufen Sie array_unique() mit dem Array auf. Die Funktion gibt ein Array zurück, das den ersten Wert jeder Gruppe enthält, deren Werte als gleich gelten. Die Schlüssel dieser ersten Werte bleiben erhalten. Daher entstehen beim Entfernen von Duplikaten nicht zwangsläufig fortlaufende numerische Indizes.
Doppelte Werte mit array_unique() entfernen
Die Funktion akzeptiert ein Array und ein optionales Vergleichsflag. Die einfache Form lautet array_unique($array). Enthält eine Liste beispielsweise "red", "blue", "red", enthält die zurückgegebene Liste das erste "red" und "blue". Das ursprüngliche Array wird nicht sortiert, und die Reihenfolge der beibehaltenen Werte ändert sich nicht. Weisen Sie das zurückgegebene Array einer Variablen zu, wenn Sie mit der deduplizierten Fassung weiterarbeiten möchten. Die Beispielwerte red, blue und green bleiben im unveränderten PHP-Code englisch:
Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.
$colors = ["red", "blue", "red", "green", "blue"];
$uniqueColors = array_unique($colors);
Verstehen, welcher Wert und Schlüssel erhalten bleibt
Wenn Werte unter dem ausgewählten Flag als gleich gelten, behält array_unique() den zuerst gefundenen Wert und verwirft spätere übereinstimmende Werte. Bei einem indizierten Array entsteht durch ein entferntes Element eine Lücke in den Schlüsseln. Bei einem assoziativen Array bleibt der ursprüngliche Schlüssel jedes beibehaltenen Werts erhalten. Das ist nützlich, wenn Schlüssel Datensätze oder Namen kennzeichnen, kann aber Code überraschen, der Indizes wie 0, 1, 2, ... voraussetzt.
Die Funktion entfernt doppelte Werte; sie sortiert weder nach Wert noch nach Schlüssel. Wenn die Ausgabereihenfolge wichtig ist, beachten Sie, dass die beibehaltenen Werte ihre ursprüngliche relative Reihenfolge behalten. Wählen Sie ein Vergleichsflag danach aus, welche Werte als gleich gelten sollen, nicht nach der gewünschten Anzeigereihenfolge.
Ein Vergleichsflag auswählen
Das optionale Argument $flags legt den Vergleichsmodus fest. Der Standardwert SORT_STRING vergleicht Werte als Zeichenfolgen. SORT_REGULAR verwendet den üblichen PHP-Vergleich, SORT_NUMERIC vergleicht Werte numerisch und SORT_LOCALE_STRING vergleicht Zeichenfolgen entsprechend der aktuellen Locale-Einstellung. Ein Flag bestimmt, welche Werte als Duplikate gelten; es sortiert das zurückgegebene Array nicht. Bei gemischten Typen kann die Deduplizierung daher je nach Flag unterschiedlich ausfallen. Verwenden Sie einen Modus, der zur Bedeutung der Daten passt, und gehen Sie nicht davon aus, dass ein numerischer Vergleich die Werte neu anordnet.
Das Ergebnis bei Bedarf neu indizieren
Benötigt nachfolgender Code eine Liste mit fortlaufenden numerischen Schlüsseln, übergeben Sie das deduplizierte Ergebnis an array_values(). Dadurch entsteht ein neues numerisch indiziertes Array, in dem die Reihenfolge der beibehaltenen Werte erhalten bleibt. Behalten Sie die Schlüssel bei, wenn sie eine Bedeutung haben, etwa Produkt-IDs oder Bezeichnungen. Indizieren Sie das Array nur neu, wenn der aufrufende Code eine einfache Liste erwartet. Das Neuindizieren ist ein separater Schritt und wird von array_unique() nicht automatisch ausgeführt.
Das Ergebnis anhand eines PHP-Beispiels überprüfen
Führen Sie dieses vollständige Beispiel aus, um die beibehaltenen Werte und die Wirkung des Neuindizierens zu prüfen:
Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.
$items = ["first" => "pear", "second" => "plum", "third" => "pear", "fourth" => "lime"];
$uniqueItems = array_unique($items);
$listItems = array_values($uniqueItems);
echo "Unique values with original keys:\n";
print_r($uniqueItems);
echo "Same values with consecutive keys:\n";
print_r($listItems);
Das erste Ergebnis behält die Schlüssel first, second und fourth; der spätere Eintrag mit pear wird entfernt. Das neu indizierte Ergebnis enthält dieselben Werte in derselben Reihenfolge, nun mit fortlaufenden numerischen Schlüsseln. Die Beschriftungen Unique values with original keys: und Same values with consecutive keys: in der unveränderten Beispielausgabe bleiben englisch. Dieser Unterschied hilft bei der Entscheidung, ob Sie die Schlüssel von Datensätzen beibehalten oder eine Liste für Code vorbereiten möchten, der gewöhnliche numerische Indizes erwartet.