Ankündigung

Einklappen
Keine Ankündigung bisher.

array_diff Problem

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • array_diff Problem

    Hi,

    ich habe ein array wo ich eine IP Adresse drin habe.

    Später wird ein anderes array erzeugt, wo auch IP-Adressen gelistet sind.
    Mittels array_diff wollte ich nun die gleichen und die ungleichen Adressen abfragen.

    Leider klappt das nur, wenn es unterschiedliche Adressen sind.
    Sobald es die gleichen Adressen sind (aber mehrmals gelistet) erhalte ich nicht die gewünschte/erhoffte Ausgabe.

    Hier der Output der beiden Arrays:
    Code:
    Array
    (
        [0] => 94.222.70.40
    )
    Array
    (
        [0] => 94.222.70.40
        [1] => 94.222.70.40
        [2] => 94.222.70.40
    )
    PHP-Code:
    array_diff($alt$neu);  ## Suche nach UNTERSCHIEDLICHEN IP Adressen
    array_diff($neu$alt);  ## Suche nach NEUE IP Adressen 
    Leider gibt dies 2 leere array aus.

    Ziel soll es sein, das die beiden Array Inhalte vergleichen werden.
    Theoretisch tut das array_diff ja auch. Er vergleicht $alt (1 IP) mit $neu (3 IP's). Die IP ist hier immer gleich... das array selbst ist aber unterschiedlich. Denn array $alt hat ja nur einen Eintrag und array $neu hat 3.

    Er müsste mir nun sagen, das 2 neue Einträge vorhanden sind. Unabhängig davon, das Eintrag 2+3 die gleichen sind wie Eintrag 1.

    Kann ich das mit array_diff oder ein ähnlichen Befehl erreichen oder muß ich mir hier selbst eine function bauen ?


  • #2
    Zitat von lord_icon Beitrag anzeigen
    Er müsste mir nun sagen, das 2 neue Einträge vorhanden sind. Unabhängig davon, das Eintrag 2+3 die gleichen sind wie Eintrag 1.
    Das klingt unsinnig.
    "Mein Name ist Lohse, ich kaufe hier ein."

    Kommentar


    • #3
      Was ist daran unsinng ?

      Ich möchte die Unterschiede im Array feststellen.
      Und ein Unterschied wäre ja schon mal, das ich 3 Einträge habe statts 1nen.

      Wenn ich die function selbst schreiben würde, dann müßte ich erstmal:
      * prüfen, ob array gleiche Zeilenanzahl hat
      Wenn ja = dann prüfe, ob es sich um den gleichen Wert handelt = wenn ja, dann done

      * Wenn nein = dann mehrer Einträge gefunden. Prüfe dann weiter ob:
      Alter Wert in den neuen x Zeilen vorkommt.

      Wenn ja = dann sind die restlichen Zeilen neue Werte = Ausgabe
      Wenn nein = dann sind ALLE Zeilen neue Werte


      Und dies gewährleistet array_diff nicht.

      Kommentar


      • #4
        array_diff vergleicht aber Werte. Du hast ja eine andere Anforderung. Ich denke die Funktion musst du dir selbst schreiben.
        "Mein Name ist Lohse, ich kaufe hier ein."

        Kommentar


        • #5
          Ahnt ichs.

          Danke. Hatte gehofft, das es noch eine andere PHP Funktion gibt, die mir so noch nicht geläufig ist.

          Gut... dann zurück an's Reißbrett und das Rad neu bauen ^^

          Kommentar


          • #6
            Theoretisch tut das array_diff ja auch. Er vergleicht $alt (1 IP) mit $neu (3 IP's). Die IP ist hier immer gleich... das array selbst ist aber unterschiedlich. Denn array $alt hat ja nur einen Eintrag und array $neu hat 3.

            Er müsste mir nun sagen, das 2 neue Einträge vorhanden sind. Unabhängig davon, das Eintrag 2+3 die gleichen sind wie Eintrag 1.
            Nein, siehe Manual:
            gibt ein Array mit allen Werten von array1, welche in keinem der anderen Argumente enthalten sind, zurück...
            Sollte logisch sein, daß da nichts bei rauskommt, denn der Wert aus Deinem ersten Array kommt im zweiten vor (wie oft ist erstmal egal).

            Probier mal array_diff_assoc() aus.
            Hab's nicht getestet, aber ich denke das könnte Dich dem erwünschten Ergebnis etwas näher bringen...
            Competence-Center -> Enjoy the Informatrix
            PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

            Kommentar


            • #7
              Zitat von Arne Drews Beitrag anzeigen
              Probier mal array_diff_assoc() aus.
              Hab's nicht getestet, aber ich denke das könnte Dich dem erwünschten Ergebnis etwas näher bringen...
              Nein, siehe Manual:
              array_diff_assoc — Berechnet den Unterschied zwischen Arrays mit zusätzlicher Indexprüfung


              Edit:
              Wie wärs mit einem array_diff_assoc auf die beiden array_count_values()?
              "Mein Name ist Lohse, ich kaufe hier ein."

              Kommentar


              • #8
                Zitat von Chriz Beitrag anzeigen
                Edit:
                Wie wärs mit einem array_diff_assoc auf die beiden array_count_values()?
                Lol... einmal Verbesserst du den Vorschlag mit array_diff_assoc von Arne Drews mit "nein..." und im Edit schlägst du dieses selbst vor. :->


                array_count_values = wäre dann ein Ansatz für die eigens geschriebene Funktion. Danke hierzu

                Kommentar


                • #9
                  Jein, array_diff_assoc prüft den Index, das hat bei deiner Problematik ja keine Relevanz, nehme ich zumindest an.
                  Bei array_count_values() hat der Index aber sehr wohl Relevanz.

                  Edit, hier mal was zum Testen:
                  PHP-Code:
                  <?php
                  function array_diff_count(array $arr1, array $arr2)
                  {
                      
                  $diff = array();
                      foreach (
                  $arr1 as $key1 => $el1) {
                          
                  $pos array_search($el1$arr2);
                          if (
                  $pos === false) {
                              
                  $diff[$key1] = $el1;
                          } else {
                              unset(
                  $arr2[$pos]);
                          }
                      }
                      return 
                  $diff;
                  }

                  $arr1 = array("192.168.0.1""192.168.0.1""192.168.0.1""123.456.789");
                  $arr2 = array("192.168.0.1""127.0.0.1");

                  var_dump(array_diff_count($arr1$arr2));
                  ?>
                  "Mein Name ist Lohse, ich kaufe hier ein."

                  Kommentar


                  • #10
                    Naja, von dem Beispiel mit den gleichen IPs ausgehend, das oben angegeben wurde reicht array_diff_assoc()...
                    PHP-Code:
                    $alt = array('94.222.70.40');
                    $neu = array('94.222.70.40','94.222.70.40','94.222.70.40');

                    print_r(array_diff_assoc($alt$neu)); 
                    führt zur Ausgabe
                    Code:
                    Array
                    (
                        [1] => 94.222.70.40
                        [2] => 94.222.70.40
                    )
                    Im Prinzip das was am Beispiel erwartet wurde.
                    Da ich nicht weiß, was er im weiteren damit vor hat, habe ich lediglich gesagt, daß ihn das seinem Ziel zumindest näher bringt,
                    nicht, daß es die Lösung ist...
                    Competence-Center -> Enjoy the Informatrix
                    PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

                    Kommentar


                    • #11
                      So wie ich die Funktion verstanden habe (ich muss bei den array_* Funktionen eh immer ins Handbuch schauen) vergleicht sie den Schlüssel und klar, der ist in diesem Beispiel zufällig gleich, aber ich nehme mal an, dass das real nicht der Fall ist.
                      "Mein Name ist Lohse, ich kaufe hier ein."

                      Kommentar


                      • #12
                        Richtig, wenn die Schlüssel wie in dem Beispiel nicht gleich sind bringt ihn das nicht weiter...
                        Ich bin davon ausgegangen, daß sein Beispiel bis auf die gleiche IP seiner Projektpraxis entstammt.
                        Muß aber nicht - dann muß er eben doch selbst ran...
                        Competence-Center -> Enjoy the Informatrix
                        PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

                        Kommentar

                        Lädt...
                        X