1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • 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
  • wuz_thomas
    12
    wuz_thomas
    Mitglied
    Reaktionen
    1
    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
    26
    mdk
    Emeritus
    Reaktionen
    130
    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
    22
    Swoncen
    Mitglied
    Reaktionen
    1
    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.

    640K ought to be enough for anybody. :eek2:

  • wuz_thomas
    12
    wuz_thomas
    Mitglied
    Reaktionen
    1
    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
    7
    Soulmerge
    Mitglied
    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 :winking_face:

    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 :)

    '100 little bugs in the code, 100 bugs in the code. Fix one bug, compile it again: 101 little bugs in the code.
    101 little bugs in the code . . .'
    Continue until 0 Bugs reached...

  • Swoncen
    22
    Swoncen
    Mitglied
    Reaktionen
    1
    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?

    640K ought to be enough for anybody. :eek2:

  • Soulmerge
    7
    Soulmerge
    Mitglied
    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 :)

    '100 little bugs in the code, 100 bugs in the code. Fix one bug, compile it again: 101 little bugs in the code.
    101 little bugs in the code . . .'
    Continue until 0 Bugs reached...

  • Swoncen
    22
    Swoncen
    Mitglied
    Reaktionen
    1
    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?

    640K ought to be enough for anybody. :eek2:

  • Soulmerge
    7
    Soulmerge
    Mitglied
    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ß.

    '100 little bugs in the code, 100 bugs in the code. Fix one bug, compile it again: 101 little bugs in the code.
    101 little bugs in the code . . .'
    Continue until 0 Bugs reached...

  • Swoncen
    22
    Swoncen
    Mitglied
    Reaktionen
    1
    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..

    640K ought to be enough for anybody. :eek2:

  • Maximilian Rupp 27. Dezember 2024 um 12:06

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!

Benutzerkonto erstellen Anmelden

Benutzer online in diesem Thema

  • 1 Besucher

Rechtliches

Impressum

Datenschutzerklärung