Ankündigung

Einklappen
Keine Ankündigung bisher.

array_diff

Einklappen

Neue Werbung 2019

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

  • array_diff

    Hallo leute,

    ich muss ein kleines Script schreiben der mit dateien von einem sftp server mit lokalen dateien vergleicht.

    Das auslesen der dateien aus bestimmten quellen ist kein problem, aber, array_diff hat ein komisches verhalten

    PHP-Code:
    $array1 = array(1,2,3);
    $array2 = array(1,2,3,4,5);
    var_dump(array_diff($array1,$array2));
    var_dump(array_diff($array2,$array1)); 
    ausgabe:
    Code:
    array (size=0)
      empty
    
    array (size=2)
      3 => int 4
      4 => int 5
    man muss das groessere array am anfang angeben. gibt es eine andere moeglichkeit, unterschiede in den array zu ermitteln? ich habe 3 arrays die genauso wie oben aufgebaut sind, nur mit mehr werten, die unterschiede zwischen den 3 arrays ist eigentlich immer so bei 200 werten, aber ich kriege die anzahl nur dann wenn das groesste array als erster parameter uebergeben wird..

    vielleicht kann mir ja jemand hier weiterhelfen

    LG BlackScorp
    apt-get install npm -> npm install -g bower -> bower install <package> YOLO [URL]https://www.paypal.me/BlackScorp[/URL] | Mein Youtube PHP Kanal: [url]https://www.youtube.com/c/VitalijMik[/url]

  • #2
    Zitat von array_diff
    Vergleicht array1 mit einem oder mehr anderen Arrays und gibt die Werte aus array1 zurück, die in keinem der anderen Arrays enthalten sind.
    Das Verhalten ist doch aber auch verständlich, oder? Was für eine Ausgabe würdest du denn bei so einem Aufruf erwarten?
    PHP-Code:
    array_diff([1,2],[2,3],[1,3]); 
    Gib mal ein Beispiel wie du's gerne hättest.

    Kommentar


    • #3
      gewunschte ausgabe
      PHP-Code:
      array (size=2)
        
      => int 4
        4 
      => int 5

      array (size=2)
        
      => int 4
        4 
      => int 5 
      egal in welcher rheinfolge und wieviele parameter uebergeben werden
      apt-get install npm -> npm install -g bower -> bower install <package> YOLO [URL]https://www.paypal.me/BlackScorp[/URL] | Mein Youtube PHP Kanal: [url]https://www.youtube.com/c/VitalijMik[/url]

      Kommentar


      • #4
        Hmm. array_merge() und dann ein array_unique()? Ist jetzt so ne Idee die mir in den Sinn kommt. Performancetechnisch vermutlich alles andere als ideal.

        EDIT: Und wie gesagt, bei 3 Arrays kann das natürlich problematisch werden. In meinem Beispiel von oben würde da z.B. nichts rauskommen.

        Kommentar


        • #5
          dann merge ich die und hole unique raus, was ist die differenz?? performance spielt hier keine rolle, ist nur ein kleiner analyse/debuggin script
          apt-get install npm -> npm install -g bower -> bower install <package> YOLO [URL]https://www.paypal.me/BlackScorp[/URL] | Mein Youtube PHP Kanal: [url]https://www.youtube.com/c/VitalijMik[/url]

          Kommentar


          • #6
            Sorry, hab da array_unique kurz verwechselt. So hätte ichs gemeint:
            PHP-Code:
            function my_diff(array $a, array $b) {
                
            $total array_merge($a,$b);
                
            $counts array_count_values($total);
                
                return 
            array_filter($counts, function($value) { return $value == 1; });

            Kommentar


            • #7
              array_diff ist ein Soll-Ist-Vergleich, der die fehlenden ist-Werte ermittelt.
              PHP-Code:
              $soll = array(1,2,3,4,5);
              $ist = array(1,2,3);
              $diff array_diff($soll,$ist); 
              Bei mehreren ist-arrays (array 1..n) ist das so, als wenn vorher ein array_merge über alle ist-array gemacht wird.

              Der Sinn des Ganzen, bei vertauschten Soll-Ist das selbe Ergebnis zu fordern, ist mir nicht klar.

              Vemutlich suchst du so was in der Richtung:
              PHP-Code:
              $soll = array(1,2,3,4,5);
              $ist = array(1,2,3);

              $schnitt array_intersect($soll,$ist);
              $sum =array_merge($soll,$ist);
              $diff array_diff($sum,$schnitt); 

              Kommentar


              • #8
                naja also ich habs nun so geloest

                PHP-Code:
                <?php
                $array1 
                = array(1,2,3);
                $array2 = array(1,2,3,4);
                $array3 = array(1,4);

                $firstAreSame $array1 === $array2;
                $mergedFirst $array1;
                if(!
                $firstAreSame){
                    
                $mergedFirst $array1+$array2;
                }
                if(
                $mergedFirst $array3){
                    
                $difference array_diff($mergedFirst $array3);
                }else{
                    
                $difference array_diff($array3 $mergedFirst);
                }

                var_dump($difference);
                ich habs davor zu allgmein beschrieben, aber dieser schnipsel hat letzendlich zum erfolg in meinem usecase gefuehrt. sollte halt ein vergleich von 2 ssh servern und lokaler dateien sein, um zu sehen, welche wurden nicht hochgeladen(warum auch immer) $array1 und 2 sind sftp server array3 ist lokal, 1 und 2 sollte eigentlich identisch sein weil die hinter einem loadbalancer stecken und eigentlich gespiegelt sein sollten
                apt-get install npm -> npm install -g bower -> bower install <package> YOLO [URL]https://www.paypal.me/BlackScorp[/URL] | Mein Youtube PHP Kanal: [url]https://www.youtube.com/c/VitalijMik[/url]

                Kommentar

                Lädt...
                X