Wie kann ich doppelte Werte aus einem mehrdimensionalen Array in PHP entfernen?
Beispielarray:
Array
(
[0] => Array
(
[0] => abc
[1] => def
)
[1] => Array
(
[0] => ghi
[1] => jkl
)
[2] => Array
(
[0] => mno
[1] => pql
)
[3] => Array
(
[0] => abc
[1] => def
)
[4] => Array
(
[0] => ghi
[1] => jkl
)
[5] => Array
(
[0] => mno
[1] => pql
)
)
serialize(array('a' => '1', 'b' => '1'))
ist anders alsserialize(array('b' => '1', 'a' => '1'))
. Diese Option schlägt für Arrays fehl, die alssets
oder verwendet werden(hash)maps
.Seit 5.2.9 können Sie verwenden,
array_unique()
wenn Sie dasSORT_REGULAR
Flag wie folgt verwenden :Dadurch vergleicht die Funktion Elemente auf Gleichheit, als ob
$a == $b
sie verwendet würden, was für Ihren Fall perfekt ist.Ausgabe
Beachten Sie jedoch, dass in der Dokumentation Folgendes angegeben ist:
quelle
Ich hatte ein ähnliches Problem, fand aber eine 100% funktionierende Lösung dafür.
quelle
Ein anderer Weg. Erhält auch Schlüssel.
quelle
Die Benutzerkommentare zur Dokumentation array_unique () haben viele Lösungen dafür. Hier ist einer von ihnen:
Dies ist von http://ca3.php.net/manual/en/function.array-unique.php#57202 .
quelle
Wenn "Duplikate entfernen" bedeutet "Duplikate entfernen, aber eines dort lassen", besteht eine Lösung möglicherweise darin, zuerst
array_unique(...)
die "Bezeichnerspalte" anzuwenden und dann im ursprünglichen Array alle Schlüssel zu entfernen, die aus dem Spaltenarray entfernt wurden ::Das Ergebnis ist:
quelle
Dadurch werden die doppelten Namen aus dem Array entfernt. einzigartig nach Schlüssel
quelle
$array
die Tasten bei "0" beginnen. Es ist möglich$array
, dass die Schlüssel bei einer anderen Nummer beginnen, wenn dies$array
das Ergebnis einer vorherigen Array-Manipulation ist. Verwenden Siearray_values
dieseEinfache Lösung:
quelle
Verwenden Sie einfach die Option SORT_REGULAR als zweiten Parameter.
quelle
Wenn Sie Duplikate auf bestimmten Schlüsseln entfernen müssen, z. B. eine MySQL-ID, finden Sie hier eine einfache Funktion
Bonuspunkte Sie können eine Reihe von Schlüsseln übergeben und einen äußeren foreach hinzufügen, der jedoch pro zusätzlichem Schlüssel 2x langsamer ist.
quelle
Ein sehr einfacher und logischer Weg, um ein mehrdimensionales Array eindeutig zu machen, ist wie folgt:
Wenn Sie ein Array wie dieses haben:
Verwenden Sie
foreach
, um dies zu lösen:Sie erhalten folgendes Ergebnis:
und wenn Sie die Reihenfolge der Schlüssel ändern möchten,
Mit dieser Operation erhalten Sie folgende Schlüsselwerte:
Ich hoffe das wird alles klären.
quelle
Wenn Sie ein Array wie dieses haben:
(Benutzer ist der Name des Arrays)
und Sie möchten Duplikate löschen ... dann:
kann eine Lösung sein: P.
quelle
Eine einfach zu lesende Lösung, wahrscheinlich nicht die effizienteste:
quelle
Wie die Leute sagen,
array_unique()
ist es sehr langsam, hier ist ein Ausschnitt, den ich für ein mehrdimensionales Array mit einer Ebene verwende.Referenz erster Benutzer hat Hinweis zur
array_unique()
Funktionsseite in php.net beigetragenquelle
$output = array_map('unserialize', array_keys($result));
Viele Leute haben mich gefragt, wie man ein einzigartiges mehrdimensionales Array erstellt. Ich habe auf Ihren Kommentar Bezug genommen und er hilft mir.
Zunächst einmal danke ich @jeromegamez @daveilers für Ihre Lösung. Aber jedes Mal, wenn ich die Antwort gab, fragten sie mich, wie diese "Serialisierung" und "Unserialisierung" funktioniert. Deshalb möchte ich den Grund dafür mit Ihnen teilen, damit mehr Menschen das Konzept dahinter verstehen.
Ich erkläre, warum wir in Schritten 'serialize' und 'unserialize' verwenden:
Schritt 1: Konvertieren Sie das mehrdimensionale Array in ein eindimensionales Array
Um das mehrdimensionale Array in ein eindimensionales Array zu konvertieren, generieren Sie zunächst eine Byte-Stream-Darstellung aller Elemente (einschließlich verschachtelter Arrays) innerhalb des Arrays. Die Funktion serialize () kann eine Byte-Stream-Darstellung eines Werts erzeugen. Um eine Byte-Stream-Darstellung aller Elemente zu generieren, rufen Sie die Funktion serialize () in der Funktion array_map () als Rückruffunktion auf. Das Ergebnis ist ein eindimensionales Array, unabhängig davon, wie viele Ebenen das mehrdimensionale Array hat.
Schritt 2: Machen Sie die Werte eindeutig
Verwenden Sie die Funktion array_unique (), um dieses eindimensionale Array eindeutig zu machen.
Schritt 3: Setzen Sie es auf das mehrdimensionale Array zurück
Obwohl das Array jetzt eindeutig ist, sehen die Werte wie eine Byte-Stream-Darstellung aus. Verwenden Sie die Funktion unserialize (), um es auf das mehrdimensionale Array zurückzusetzen.
Nochmals vielen Dank für all das.
quelle
Eine Alternative zu serialisieren und einzigartig
* /
quelle
Wenn Sie ein solches Array haben
und Sie möchten Arrays wie folgt erhalten:
oder
Ein folgender Code kann helfen
quelle
Ich habe viel über dieses Problem nachgedacht und festgestellt, dass die optimale Lösung zwei Regeln folgen sollte.
In diesem Sinne und angesichts aller Macken von PHP ist unten die Lösung aufgeführt, die ich gefunden habe. Im Gegensatz zu einigen anderen Antworten können Elemente basierend auf den gewünschten Schlüsseln entfernt werden. Es wird erwartet, dass das Eingabearray Zifferntasten sind.
Der einzige Nachteil ist, dass die Schlüssel nach Abschluss der Iteration nicht in Ordnung sind. Dies ist kein Problem, wenn Sie anschließend nur foreach-Schleifen verwenden. Wenn Sie jedoch eine for-Schleife verwenden müssen, können Sie
$input = array_values($input);
die Schlüssel nach dem oben Gesagten neu nummerieren.quelle
Basierend auf der als richtig markierten Antwort, füge meine Antwort hinzu. Kleiner Code hinzugefügt, nur um die Indizes zurückzusetzen.
quelle