Aus einem Array doppelte Werte entfernen
Simon Riedl
- php
0 Andreas Bierhals0 Carsten0 Katinka
Hallo!
Gibt es bei PHP 3 die Möglichkeit, aus einem Array alle doppelten Werte zu entfernen? Beispielsweise soll aus einem Array (8,6,10,6,5,8) die doppelten Werte 8 und sechs herausgefiltert werden damit sowas entsteht (8,6,10,5).
Ich habe schon herumgebastelt und folgendes erstellt:
$a1=Array() //das Array mit den doppelten Werten
$a2=Array(); $a2_count=0;
for($i=0; $i<counter($a1); $i++){
for($j=0,$k=0; $j<count($a1); $j++){
if($a1[$i]==$a1[$j]) {$k++;}
}// end for
if ($k==1){$a2[$a2_counter]=$a1[$i]; $a2_counter++;}
}// end for
$a1=$a2;
Mein Problem ist jetzt allerdings, wenn bei hier ein Wert doppelt auftaucht, dann wird er ganz gestrichen (weil $k=2 ist). Es soll der Wert aber nur beim 2. Mal gestrichen werden.
Kann mir jemand weiterhelfen, wie ich dieses Problem lösen kann?
Simon
Moin,
Mein Problem ist jetzt allerdings, wenn bei hier ein Wert doppelt auftaucht, dann wird er ganz gestrichen (weil $k=2 ist). Es soll der Wert aber nur beim 2. Mal gestrichen werden.
Kann mir jemand weiterhelfen, wie ich dieses Problem lösen kann?
Dieses Problem schreit geradezu nach Verwendung
von Hashtabellen. Probier mal folgendes (in Perl):
#!/usr/bin/perl
@A = (8,6,10,6,5,8);
for(@A) {
$X{$_}=1;
}
@B = keys %X;
for(@B) {
print $_."\n";
}
mit PHP kenn ich mich nicht so aus, es sollte damit
im Prinzip aber genauso gehen.
Viele Grüße
Andreas
Hallo Simon!
Gibt es bei PHP 3 die Möglichkeit, aus einem Array alle doppelten Werte zu entfernen? Beispielsweise soll aus einem Array (8,6,10,6,5,8) die doppelten Werte 8 und sechs herausgefiltert werden damit sowas entsteht (8,6,10,5).
tja, in PHP 4 gäbe es da ja array_unique() ...
In PHP sind alle Arrays Hashes, d.h. man kann beliebige Werte als Indices (=Schlüssel=$key) benutzen. Wieso also nicht die Feldwerte? Dadurch löschen sich die doppelten dann von alleine aus. (Der 'Hubert'ste-eintrag kann nur einmal existieren.)
Dannach werden die Indices (das waren zu Anfang die Inhalte) wieder in ein neues Feld als Wert eintragen, und dabei werden die Einträge dann wieder neu durchnummeriert.
Das funktioniert nur mit Strings und Zahlen (nicht mit Arrays und Objekten).
$deinFeld=array( ..... ); // <--- zu verwurstendes Feld
// hier werden die Werte($val) und Indices($key) vertauscht
// in ein neues Feld eingtragen:
$feld1=array();
function Eintragen1($val, $key)
{
global $feld1;
$feld1[$val]=$key;
}
array_walk($deinFeld,'Eintragen1');
// das enstandende Feld in ein neues von 0... durchnummeriertes
// Eintragen und aus den Indices wieder Inhalte machen
$ErgebnisFeld=array();
$index=0;
function Eintragen2($val,$key)
{
global $ErgebnisFeld, $index;
$ErgebnisFeld[$index++]=$key;
}
array_walk($feld1,'Eintragen2');
ungetestet, also nicht schlagen wenn ich irgendwo ein $ vergessen habe.
Gruss,
Carsten
du kannst es einfach mit in_array nach schauen:-)
eine schleife durch das erste Array und klebe an das zweite Array if-not in_array :-)