Daniel.: Arrays vergleichen

Hallo zusammen,

ich habe 2 Arrays, die ich vergleichen will. Dabei sind beide Arrays exakt gleicher Struktur und ich möchte vergleichen ob [0]=[0]; [1]=[1] etc ist und nur die Unterschiede ausgeben:

  
print_r($log_array1);  
/*liefert:  
Array ( [0] => Array ( [id] => 2115  [USER] => xyz  [ADRESSE] => Musterstr. 4  
...  
*/  
print_r($log_array2);  
/*liefert:  
Array ( [0] => Array ( [id] => 2115  [USER] => xyz  [ADRESSE] => Musterstr. 99  
...  
*/  

mit

  
$result = array_diff_assoc($log_array1, $log_array2);  
und  
$result = array_diff($log_array1, $log_array2);  

habe ich jetzt versucht, den Unterschied (Musterstr. 4) zu bekommen, leider liefert mir print_r($result_string);
nur Array()
Hat jemand eine Idee?

  1. habe ich jetzt versucht, den Unterschied (Musterstr. 4) zu bekommen, leider liefert mir print_r($result_string);
    nur Array()
    Hat jemand eine Idee?

    var_dump($result_string);

    1. var_dump($result_string);

      hmm, das liefert mir
      array(0) { }

  2. Hello,

    ich habe 2 Arrays, die ich vergleichen will. Dabei sind beide Arrays exakt gleicher Struktur und ich möchte vergleichen ob [0]=[0]; [1]=[1] etc ist und nur die Unterschiede ausgeben:

    Hat jemand eine Idee?

    Für den Vergleich der Arrays kannst Du Dir eine Funktion schreiben.

    Gehe das eine Array mit foreach (rekursiv) durch und schaue im zweiten, ob das Element dort auch vorhanden ist. Wenn vorhanden, kannst du die beiden Inhalte vergleichen, wenn nicht, sind die Arrays sowieso schon unterschiedlich.

    Beim Vergleich kannst Du dann auch noch Groß-/Kleinschreibung und die Typen berücksichtigen.

    Liebe Grüße aus Syburg bei Dortmund

    Tom vom Berg

    --
    Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de
    1. Gehe das eine Array mit foreach (rekursiv) durch und schaue im zweiten, ob das Element dort auch vorhanden ist. Wenn vorhanden, kannst du die beiden Inhalte vergleichen, wenn nicht, sind die Arrays sowieso schon unterschiedlich.

      Das Problem ist, das jedes Array z.Zt. 330 Variablen hat und die sind eben teilweise auch gleich. Mich interessiert eher, ob der Wert an der 3. Stelle in Array 1 == dem Wert an der 3. Stelle in Array 2.

      Nun habe ich dieses hier probiert:

        
      foreach($log_array1 as $log1) {  
        foreach($log_array2 as $log2)  
         if ($log1 == $log2)  
           echo $log2."**".$log2;  
      }  
      
      

      ..überhaupt keine Ausgabe...

  3. echo $begrüßung;

    ich habe 2 Arrays, die ich vergleichen will.

    Der erste Teil stimmt insofern nicht, als dass du nicht zwei Arrays hast sondern zweimal ein Array im Array. So sagt es deine Ausgabe:

    print_r($log_array1);
    Array ( [0] => Array ( [id] => 2115  [USER] => xyz  [ADRESSE] => Musterstr. 4

    Dabei sind beide Arrays exakt gleicher Struktur

    Die gleiche (Verschachtelungs-)Struktur ist irrelevant. Die diff-Funktionen interessieren sich nur für eine Ebene. Weiterhin

    habe ich jetzt versucht, den Unterschied (Musterstr. 4) zu bekommen, leider liefert mir print_r($result_string);
    nur Array()

    Also kein Ergebnis. Das ist insoweit verständlich, als dass die String-Darstellung der Werte verglichen wird. (So sagt es das Handbuch.) Die Stringdarstellung eines Arrays ist immer "Array", so dass das/die Unterarray(s) immer gleich aussehen.

    Hat jemand eine Idee?

    Was spricht dagegen, die Unterarrays zu testen? Oder anders: Ist diese Verschachtelung gewollt / notwendig?

    Wenn die Struktur so richtig ist, dann würde ich eine der u-Funktionen probieren. Die callback-Funktion muss dann die Unterschiede zwischen den Unterarrays ermitteln, wofür sie sich ja auch wieder der Hilfe von array_diff_* bedienen kann.

    echo "$verabschiedung $name";

  4. Hallo,

      
    function array_equal($array1,$array2) {  
        foreach($array1 as $key=>$value) {  
            if(isset($array2[$key])) {  
                if (!($array1[$key]==$array2[$key])) {  
                    return false;  
                }  
            } else {  
                return false;  
            }  
        }  
        return true;  
    }  
    
    

    mfg, Flo

    --
    Developers are dying. Computers are getting trash. CEO's become forgetten. The only remaining things are ideas, lies and crises. So if you want to be immortal, first think, than stop it and go to microsoft and become later a manager at Lehman Brothers...
    sh:) fo:| ch:? rl:( br:^ n4:| ie:{ mo:| va:} de:> zu:} fl:{ ss:) ls:< js:|
    *Zu dem de:> Ich benutze wegen IE im moment noch tabellen, weil dieser display:table noch nicht versteht. Ich werde aber, wenn IE 6 & IE 7 < 10% mein neues CSS-Layout einspielen...
    1. echo $begrüßung;

      Warum wirfst du ein unkommentiertes Stück Code in den Raum, das noch dazu nicht zur Aufgabenstellung passt? Das vom OP bereits gefundene array_diff_assoc() ist schon wesentlich näher am Ziel gewesen als dein Versuch.

      Wenn dich die Programmierwut packt, und du nach einer Lösung für eine Problemstellung suchst, ist das ja nicht verkehrt. Es ist nur für den Frager und für Mitlesende ergiebiger, wenn du auch deine Gedanken zur Lösung mitteilst, denn daraus kann man auch noch eine Menge lernen. Sowohl der Fragende als auch du, wenn du korrigiert wirst.

      echo "$verabschiedung $name";