1. Weiterleitung zu NetzLiving.de
  2. Forum
    1. Unerledigte Themen
  3. zum neuen Forum
  • Anmelden
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

Array: nur doppelte Einträge sind wichtig (einzelne Eleminieren)

  • wuz_thomas
  • 5. März 2006 um 19:52
  • Unerledigt
Hallo zusammen,

das Informatik-Forum geht in den Archivmodus, genaue Informationen kann man der entsprechenden Ankündigung entnehmen. Als Dankeschön für die Treue bekommt man von uns einen Gutscheincode (informatikforum30) womit man bei netzliving.de 30% auf das erste Jahr sparen kann. (Genaue Infos sind ebenfalls in der Ankündigung)

Vielen Dank für die Treue und das Verständnis!
  • wuz_thomas
    Punkte
    1.501
    Beiträge
    195
    • 5. März 2006 um 19:52
    • #1

    Hi, trotz zahlreicher array funktionen in php finde ich einfach keine lösung für mein problem:

    Ich habe ein string - array wo manche einträge doppelt sind, jetzt möchte ich alle einzelnen einträge elemenieren, so dass zuerst nur die doppelten überleben. Die doppelten kann ich dann immernoch mit array_unique elemenieren (wenn die ursprünglichen einzelnen weg sind), aber wichtig ist der erste schritt.

    Bsp:

    PHP
    $input = array("grün", "rot", "rot", "blau");
    $new_input = funktion_die_ich_suche($input)
    //danach ist nur noch: "rot, "rot" im array
    finally = array_unique($new_input);
    dann ist nur mehr rot im array, was ich auch will...
  • mdk
    Punkte
    7.120
    Beiträge
    1.390
    • 5. März 2006 um 20:04
    • #2

    wie wäre es mit einem workaround (in pseudocode):

    PHP
    for each element in array {
    if (element not in array2) { add element to array2; delete element; }
    }
  • Swoncen
    Punkte
    5.331
    Beiträge
    993
    • 5. März 2006 um 20:25
    • #3

    Also du brauchst die einzelnen nicht mehr? (Ansonsten würde array_unique ja ausreichen). Also ich würde es so machen.

    PHP
    $nCount = 0;
    for($i = 0; $i < sizeof($array); $i++)
    {
        for($j = $i; $j < sizeof($array); $j++)
        {
            if( !strcmp($array[$i], $array[$j]) )
            {
                $newArray[$nCount] = $array[$i];
                $nCount++;
                break;
            }
        }
    }
    Alles anzeigen



    Mir fällt keine elegantere Methode ein.

  • wuz_thomas
    Punkte
    1.501
    Beiträge
    195
    • 6. März 2006 um 03:16
    • #4

    thx; im php4 - forum habe ich das noch gefunden:

    PHP
    $arry= array("grün", "rot", "rot", "blau","gelb","gelb");
    function getmehrfache($arr){
        $temp= array();
        for($i=0;$i<count($arr);$i++){ echo $arr[$i];
            for($a=$i;$a<count($arr);$a++){
                if(isset($arr[$a+1]))
                if($arr[$i]==$arr[$a+1] && !in_array($arr[$i],$temp)){
                    $temp[]=$arr[$i];
                    continue;
                }
            }
        }
        return $temp;
    }
    $deinarray=getmehrfache($arry);
    print_r($deinarray);
    Alles anzeigen
  • Soulmerge
    Punkte
    405
    Beiträge
    71
    • 6. März 2006 um 08:19
    • #5

    Das ist ja fürchterlich. Ich verstehe immer mehr, wieso PHP bei vielen Leuten so unbeliebt ist. Hier ein schnellerer Algorithmus mit ein wenig Struktur und Lesbarkeit ;)

    Code
    function removeElement(&$array, $pos) {
        $array[$pos] = end($array);
        array_pop($array);
    }
    
    
    function &getMultiple($array) {
        $multiple = array();
        for($i = 0; $i < count($array); $i++) {
            for($j = $i + 1; $j < count($array); $j++) {
                if ($array[$i] == $array[$j]) {
                    if (!in_array($array[$i], $multiple)) {
                        $multiple[] = $array[$i];
                    }
                    removeElement($array, $j);
                }
            }
        }
        return $multiple;
    }
    Alles anzeigen


    /edit: Ich sehe gerade, dass ich mdk's Vorschlag implementiert habe :)

  • Swoncen
    Punkte
    5.331
    Beiträge
    993
    • 6. März 2006 um 10:50
    • #6

    Soulmerge was ist fürchterlich? Was hast du an meinem Vorschlag auszusetzen?

  • Soulmerge
    Punkte
    405
    Beiträge
    71
    • 6. März 2006 um 12:28
    • #7

    Ups, tschuldige, ich habe anscheinend deinen Post vollkommen übersehen. Bitte das "fürchterlich" mit dem von wuz_thomas gefundenen Code-Beispiel zu assoziieren :)

  • Swoncen
    Punkte
    5.331
    Beiträge
    993
    • 6. März 2006 um 19:23
    • #8

    Zugegebenermaßen mein Vorschlag wär noch ein bisschen kürzer möglich:

    PHP
    for($i = 0; $i < sizeof($array); $i++)
    {
        for($j = $i; $j < sizeof($array); $j++)
        {
            if( !strcmp($array[$i], $array[$j]) )
            {
                $newArray[sizeof($newArray)] = $array[$i];
                break;
            }
        }
    }
    Alles anzeigen



    Diese schreibweiße kenn ich gar nicht: $array[] = $xy ... wird hier am Ende des Arrays das Element angehängt? Gibts das erst seit PHP5 oder hab ichs vorher schon übersehn?

  • Soulmerge
    Punkte
    405
    Beiträge
    71
    • 6. März 2006 um 19:38
    • #9

    Wäre sogar noch kürzer möglich mit array_push() oder eben mit $newArray[] = $array[$i]; was im Prinzip dasselbe macht. Gibt es schon seit PHP4, soweit ich weiß.

  • Swoncen
    Punkte
    5.331
    Beiträge
    993
    • 6. März 2006 um 19:45
    • #10

    push kenn ich, aber die obige Schreibweiße ist mir neu. Naja wieder was nützliches..

  • Maximilian Rupp 27. Dezember 2024 um 12:06

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

  1. Datenschutzerklärung
  2. Impressum