Ankündigung

Einklappen
Keine Ankündigung bisher.

array_diff

Einklappen

Neue Werbung 2019

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

  • BlackScorp
    hat ein Thema erstellt array_diff.

    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

  • BlackScorp
    antwortet
    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

    Einen Kommentar schreiben:


  • jspit
    antwortet
    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); 

    Einen Kommentar schreiben:


  • Tropi
    antwortet
    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; });

    Einen Kommentar schreiben:


  • BlackScorp
    antwortet
    dann merge ich die und hole unique raus, was ist die differenz?? performance spielt hier keine rolle, ist nur ein kleiner analyse/debuggin script

    Einen Kommentar schreiben:


  • Tropi
    antwortet
    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.

    Einen Kommentar schreiben:


  • BlackScorp
    antwortet
    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

    Einen Kommentar schreiben:


  • Tropi
    antwortet
    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.

    Einen Kommentar schreiben:

Lädt...
X