Zwei Arrays abgleichen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Zwei Arrays abgleichen

    Hallo!

    Ich habe zwei Arrays, A und B.
    Nun möchte ich einfach überprüfen, on mindestens ein Wert aus A auch in B vorkommt.

    Mir fällt dazu nur dieser Ansatz ein:

    Quellcode

    1. found = false;
    2. i = 0;
    3. while ( !found or i < count(A) )
    4. {
    5. if in_array (A[i], B)
    6. {
    7. found = true;
    8. }
    9. i ++;
    10. }


    Geht das auch effizienter?

    Gruß,
    Max123
    Die Japaner glauben jetzt auch, sie könnten den Superrechner verkaufen. Das wäre
    so, als würde man einen Jumbo-Jet nehmen, vorne und hinten die Spitzen absägen,
    davon 10 Stück zusammenschweißen und als ultimativen Super-Jet verkaufen.
  • Mich interessiert ja nicht die Schnittmenge, ich denke, dass meine Funktion da evtl. sogar effizienter für mein Vorhaben ist.
    Die Japaner glauben jetzt auch, sie könnten den Superrechner verkaufen. Das wäre
    so, als würde man einen Jumbo-Jet nehmen, vorne und hinten die Spitzen absägen,
    davon 10 Stück zusammenschweißen und als ultimativen Super-Jet verkaufen.
  • Wenn ein Wert in A auch in B vorkommt, nennt man das Schnittmenge. Ob die nun aus einem oder n Elementen besteht, ist ja abhängig von den Ausgangsmengen. Mit der Performance bin ich mir nicht sicher, aber bei großen Mengen ist deine Variante 100%ig langsamer... Denn die php-eigenen Funktionen sind direkt implementiert und damit die schnellsten die man für solch eine allgemein lösbare Aufgabe nutzen kann.

    Bei kleinen Mengen ist deine eventuell schneller. Aber du hattest ja gefragt ob es effizienter geht.

    ungetestete Lösung:

    Quellcode

    1. function searchSame($arr1, $arr2){
    2. $res = array();
    3. $res = array_intersect($arr1, $arr2);
    4. if(count($res) > 0) return true;
    5. else return false;
    6. }


    noch kürzer gehts mit dem ternären Operator ...

    cya
  • mad schrieb:

    Bei kleinen Mengen ist deine eventuell schneller. Aber du hattest ja gefragt ob es effizienter geht.


    Problem ist nur, da es nicht von der Größe alleine abhängt sonder auch von der Trefferposition. Denn Max123's Funktion bricht ja sofort ab wenn es einen Treffer gibt. D.h ist der Treffer am Anfang, muss die Funktion ein sehr großes Array gar nicht erst ganz durchlaufen.

    array_intersect muss hingegen immer die kompletten Array's durchlaufen, aber dafür könnte man damit auch mehr als zwei Arrays bearbeiten...

    Ich würde daher für obiges Beispiel Max123's Funktion vorziehen, aber mit einer "foreach"-Schleife und einer "break" Anweisung, denn ich hab mir angewöhnt Arrays nie mit Counter zu druchlaufen, da man da sehr schnell in eine Falle tappt, falls das Array keinen durchgeheneden Index hat, oder man evtl. Datenbank-Ids als Index verwendet.

    70abc
    We raise hopes, here ... until they're old enough to fend for themselves.
    - Mike Callahan