Ist die erste array_unique wirklich nötig? Ohne es scheint das gleiche Ergebnis zu liefern.
– luukvhoudt
8. Juli 2022 um 15:06 Uhr
Ich glaube ohne das erste array_unique, wenn das ursprüngliche Array dreimal einen Wert hatte, würde dies ein Array zurückgeben, das ihn zweimal hatte; oder wenn das Original es viermal hatte, würde es die Rückgabe dreimal haben usw.
– 75. Posaune
1. Oktober 2022 um 22:08 Uhr
Die obigen Kommentare sind der Grund, warum es immer wichtig ist, den Code in Antworten zu erklären.
Schöne Lösung auch für zweidimensionale Arrays, wenn wir sie verwenden array_map("serialize", $arr); Vor. Vielen Dank!
– Boolescher_Typ
5. Mai 2016 um 13:24 Uhr
Ryanday
Sie müssen die Groß-/Kleinschreibung Ihrer Funktion unempfindlich machen, um das gesuchte Ergebnis “Hello” => “hello” zu erhalten. Versuchen Sie diese Methode:
$arr = array(1=>'1233',2=>'12334',3 =>'Hello' ,4=>'hello', 5=>'U');
// Convert every value to uppercase, and remove duplicate values
$withoutDuplicates = array_unique(array_map("strtoupper", $arr));
// The difference in the original array, and the $withoutDuplicates array
// will be the duplicate values
$duplicates = array_diff($arr, $withoutDuplicates);
print_r($duplicates);
Ausgabe ist:
Array
(
[3] => Hello
[4] => hello
)
Bearbeiten von @AlixAxel:
Diese Antwort ist sehr irreführend. Es funktioniert nur in diesem speziellen Zustand. Dieses Gegenbeispiel:
Scheitert kläglich. Außerdem ist dies nicht der Weg, um Duplikate zu behalten:
array_diff($arr, array_unique($arr));
Da einer der duplizierten Werte in sein wird array_uniqueund dann von abgehackt array_diff.
Bearbeiten von @RyanDay:
Schauen Sie sich also die Antwort von @Srikanth oder @Bucabay an, die für alle Fälle funktionieren (suchen Sie in Bucabay nach Groß- und Kleinschreibung), nicht nur die in der Frage angegebenen Testdaten.
Sehr saubere und schöne Art, es zu tun. Fügen Sie einige Kommentare hinzu, damit PHP-Neulinge es verstehen können: Es ist möglich, mit dieser Sprache ordentlichen Code zu schreiben, und es sollte bekannt sein 🙂
– e-Satis
11. August 2009 um 10:44 Uhr
Übrigens, wenn das Array sehr lang ist, empfehle ich ein Beispiel mit dem Iteratormuster der SPL, um Speicher zu sparen.
– e-Satis
11. August 2009 um 10:45 Uhr
@rday – Beachten Sie, dass Ihr Testobjekt Zahlen und ein großes “U” enthält, die alle in Großbuchstaben sind, soweit es strtoupper() geht. Die zurückgegebenen Ergebnisse sind die gemischten Groß-/Kleinschreibungswerte, die strtoupper() geändert hat, nicht die Duplikate. Wenn das Poster beide Duplikate benötigt, dann wird die von John vorgeschlagene Lösung die Aufgabe ziemlich effizient mit einer Zeitkomplexität von O (n) erledigen, was meiner Meinung nach hier der beste Fall ist.
– bucabay
11. August 2009 um 21:48 Uhr
-1, Das ist ein totaler Fehlschlag: codepad.org/7NQ9lQLU. Funktioniert nur durch reinen Zufall.
– Alix Axel
20. Oktober 2012 um 16:55 Uhr
Ich habe meine 15 Minuten verschwendet, weil ich den Kommentar von @AkshatSinghal gesehen habe
– mokNathal
6. Oktober 2015 um 11:18 Uhr
Alix Axel
Dies ist der richtige Weg (Groß- und Kleinschreibung beachten):
Hier gibt es eine ähnliche Frage: stackoverflow.com/questions/1212605/…
– Bis Theis
11. August 2009 um 10:26 Uhr