fastix®: Doppelt vorkommende Werte innerhalb einer Variable entfernen

Beitrag lesen

Moin!

Das lässt sich zwar mit array_unique() auch machen, aber mein beispiel lässt sich noch etwas beschleunigen... nehmt es als Programmierbeispiel

<?php #ok. wir fangen an...
$strIDs=",31,43,32,31,31,";

Um das sinnvoll zu verarbeiten splitten wir das am Komma in einen Array:

$arIDs=explode(",",$strIDs);

die alte Textvariable können wir jetzt "vergessen", um Speicher zu sparen

unset($strIDs);

Wir legen schon mal einen leeren Array für das Ergebnis der Bemühungen an:

$arIDsBereinigt=array();

Wir haben jetzt die Daten in einen Array und gehen den für jedes Element einmal durch:

for ($i=0; $i<count($arIDs); $i++) {

# Wir schauen, ob das Element nicht etwa leer ist und hängen es, falls nicht,
   # an einen neuen Array an und arbeiten ein wenig daran, sonst nicht:
   if ($arIDs[$i] != "") {
      array_push($arIDsBereinigt,$arIDs[$i]);

# Jetzt gehen wir den Array vom Folgeelement bis zum Ende des Array durch:
      for ($k=$i+1; $k<count($arIDs); $k++) {

#Wir untersuchen, ob $arIDs[$i]==$arIDs[$k] ist (Das Element also mehrfach vorkommt):
         if ($arIDs[$i]==$arIDs[$k]) {

# Hm. Was könnten wir jetzt tun? Richtig!
            # Wir leeren das doppelte k-te Element aus dem Array:
            $arIDs[$k]="";

} # end if
      } # next $k
   } end if
} next $i

jetzt können wir den alten Array "vergessen", um Speicher zu sparen

unset ($arIDs);

Unsere "neuen Werte" stehen in einem Array, den wir (zur Not) mit Implode wieder

zurückverwandeln können. Das folgende ist also ziemlich optional, ich denke auf

das Kommate am Beginn des Strings kannst Du verzichten

$strIDs=implode(",",$arIDsBereinigt);
unset($arIDsBereinigt)

Fertig Meister!

?>

MFFG (Mit freundlich- friedfertigem Grinsen)

fastix®

--
Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Development. Auch  für seriöse Agenturen.