Aufgrund von Deserialize ist dies immer langsamer, je größer und komplexer das Array ist. Es gibt einen Grund, warum ich array_intersect_key verwendet habe (ein halbes Jahr vor dieser Antwort).
– OIS
8. Februar 2013 um 23:00 Uhr
@OIS hat es gerade getestet, hatte einen Tippfehler, aber es funktioniert.
– trevorkavanaugh
3. Juni 2013 um 20:26 Uhr
Wenn Sie den Index fortlaufend haben möchten, verwenden Sie array_values, dh $input = array_values(array_map(“unserialize”, array_unique(array_map(“serialize”, $input))));
– lbsweek
17. April 2014 um 10:44 Uhr
Heutzutage würden Sie sich wahrscheinlich für json_encode und json_decode anstelle der PHP-Serialisierung entscheiden. sollte Vorteile für die bereitgestellten Werte haben und Sie stoßen nicht auf PHP-Serialisierungsdetails, mit denen Serialize/Unserialize ausgeliefert wird und die höchstwahrscheinlich unerwünscht sind.
– hakre
23. August 2014 um 13:38 Uhr
Hüten Sie sich davor serialize(array('a' => '1', 'b' => '1')) unterscheidet sich von serialize(array('b' => '1', 'a' => '1')). Diese Option schlägt für Arrays fehl, die als verwendet werden sets oder (hash)maps.
– Andras Gyomrey
19. Oktober 2016 um 14:49 Uhr
Jack
Seit 5.2.9 können Sie verwenden array_unique() wenn Sie die verwenden SORT_REGULAR Flagge so:
array_unique($array, SORT_REGULAR);
Dadurch vergleicht die Funktion Elemente auf Gleichheit, als ob $a == $b verwendet wurden, was perfekt für Ihren Fall ist.
array_unique() ist nicht für die Arbeit mit mehrdimensionalen Arrays vorgesehen.
Ich denke, das ist eine schnellere und klarere Lösung als die akzeptierte! lasst uns für diesen stimmen! 🙂 Hmmm auf php-site wir können sehen, dass es nicht so schnell geht, wie ich dachte …
– Andron
5. Mai 2015 um 10:50 Uhr
Seltsam, dass die Verwendung des SORT_REGULAR-Flags für mich einfach nicht funktioniert, um doppelte Arrays zu entfernen.
– Stefan
30. Juli 2015 um 8:28 Uhr
@Stefan Du hast recht; es scheint nicht die richtigen Ergebnisse zu liefern, aber es ist wahrscheinlich ein Fehler, weil es funktioniert mit PHP7 =/
– Jack
30. Juli 2015 um 9:25 Uhr
Dies scheint auch in meinem Fall zu funktionieren, aber stört sich sonst noch jemand an diesem Hinweis im array_unique()-Dokument? php.net/manual/en/…
– Arleigh Hix
2. Mai 2016 um 18:46 Uhr
@Jack Sie haben Recht, dies ist ein Fehler ab PHP 5.6.23: eval.in/645675 ist aber ab PHP 7.0.8 behoben: eval.in/645676
– Zack Morris
21. September 2016 um 1:40 Uhr
Rajendrasinh
Ich hatte ein ähnliches Problem, aber ich habe eine 100% funktionierende Lösung dafür gefunden.
Dadurch werden die doppelten Namen aus dem Array entfernt. einzigartig durch Schlüssel
Stelle sicher das $arrayDie Schlüssel von beginnen bei “0”. Es ist möglich $arrayDie Schlüssel von beginnen bei einer anderen Nummer, wenn $array ist das Ergebnis einer vorherigen Array-Manipulation. Verwenden array_values um die Tasten auf „0“ zurückzusetzen
– stevevance
28. Mai 2020 um 18:19 Uhr
Wenn “Duplikate entfernen” bedeutet “Duplikate entfernen, aber eins dort lassen”, könnte eine Lösung darin bestehen, das anzuwenden array_unique(...) zuerst auf die “Identifier-Spalte” und dann im ursprünglichen Array alle Schlüssel zu entfernen, die aus dem Spalten-Array entfernt wurden:
Stelle sicher das $arrayDie Schlüssel von beginnen bei “0”. Es ist möglich $arrayDie Schlüssel von beginnen bei einer anderen Nummer, wenn $array ist das Ergebnis einer vorherigen Array-Manipulation. Verwenden array_values um die Tasten auf „0“ zurückzusetzen
– stevevance
28. Mai 2020 um 18:19 Uhr
Manoj Sharma
Der Benutzer kommentiert die array_unique() Dokumentation hat viele Lösungen dafür. Hier ist einer davon:
kenrbnsn bei rbnsn dot com
27. September 2005 12:09
Noch ein weiteres Array_Unique für mehrdimensionale Arrays. Ich habe dies nur auf zweidimensionalen Arrays getestet, aber es könnte wahrscheinlich für mehr verallgemeinert oder zur Verwendung von Rekursion gemacht werden.
Diese Funktion verwendet die Funktionen serialize, array_unique und unserialize, um die Arbeit zu erledigen.
function multi_unique($array) {
foreach ($array as $k=>$na)
$new[$k] = serialize($na);
$uniq = array_unique($new);
foreach($uniq as $k=>$ser)
$new1[$k] = unserialize($ser);
return ($new1);
}