Vergleich mehdim Arrays

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

  • Vergleich mehdim Arrays

    Hallo,

    kann mir jemand eine Seite nennen, auf der beschrieben ist, wie man mehrdimensionale Arrays vergleicht?

    Also 2 mehrdimensionale Arrays sollen auf Unterschiede verglichen werden


    Danke schon mal im voraus

  • #2
    sicher... http://de2.php.net/manual/de/function.array-diff.php

    und mit ner schleife dann durch die elemente laufen...
    Für alle die Fehler suchen, gibts gratis tolle Debuggingmöglichkeiten:
    var_dump(), print_r(), debug_backtrace und echo.
    Außerdem gibt es für unsere Neueinsteiger ein hervorragendes PHP Tutorial zu PHP 4 und PHP 5 (OOP)
    Es heißt $array['index'] und nicht $array[index]! Und nein, das ist nicht egal!
    Dieses Thema lesen, um Ärger im Forum und verzögerte Hilfen zu vermeiden.

    Kommentar


    • #3
      Bin im moment etwas verwirrt:

      Hier meine Ausführung:

      1 Array wird so erzeugt:

      PHP-Code:
      while (OCIFetchInto($sql_statement,$results,OCI_ASSOC))
           {

            
      $alte_werte_array[] = $results;
           } 
      und dann mit $_SESSION["alte_werte_array"] = $alte_werte_array;
      in Session gespeichert.

      Später wird es wieder so aufgerufen:
      $alte_werte_array = $_SESSION["alte_werte_array"];

      2 Array wird so erzeugt:

      PHP-Code:
      $neue_werte_array[] = array( $i => array(MYROW => $i,
                                                       
      s1 => $_POST["x_s1$i"],
                                                       
      s2 => $_POST["x_s2$i"],
                                                       
      s3 => $_POST["x_s3$i"],
                                                       
      s4 => $_POST["x_s4$i"])); 
      beide enthalten 4 Spalten und sind assoziativ.
      Sind sie so weit zumindest mal richtig definiert?
      oder fehlen/gibt es zu viele [] Klammern?

      dann werden sie verglichen auf Unterschiede pro
      Element des mehrdimensionalen arrays.

      Aber wie geht das?

      PHP-Code:

      for($i 1$i <= $anzahl_zeilen$i++)
             {
             
      $unterschied[] = array_diff ($neue_werte_array[$i],$alte_werte_array[$i]);
             } 
      das liefert nur fehler

      Kommentar


      • #4
        Original geschrieben von galaxy2
        das liefert nur fehler
        nämlich?

        hast du dir die beiden arrays mal mit print_r angeschaut?
        sind die indizes immer gleich?
        Ich denke, also bin ich. - Einige sind trotzdem...

        Kommentar


        • #5
          Also, das erse array (alte Werte) sieht wie folgt aus:

          PHP-Code:
          Array
          (
              [
          0] => Array
                  (
                      [
          s1] => 1
                      
          [s2] => 7
                      
          [s3] => 5
                      
          [s4] => 9
                      
                  
          )

              [
          1] => Array
                  (
                      [
          s1] => 7
                      
          [s2] => 8
                      
          [s3] => 9
                      
                  

          Spalte s4 hat in der Db ab un zu(wie hier zu sehen ist) kein Wert.
          Somit wird sie dann im Array auch anscheinend nicht angelegt.


          Array 2 mit neuen Werten sieht so aus:


          PHP-Code:
          Array
          (
              [
          0] => Array
                  (
                      [
          1] => Array
                          (
                              [
          s1] => 1
                              
          [s2 => 8
                              
          [s3] => 9
                              
          [s4] => 8
                              
                          
          )

                  )

              [
          1] => Array
                  (
                      [
          2] => Array
                          (
                              [
          s1] => 2
                              
          [s2] => 9
                              
          [s3] => 5
                              
          [s4] => 2
                             
                          
          )

                  ) 
          hier s4 im 2ten Element enhalten, da ich in das Eingabefeld einen Wert eingegeben habe.

          Irgendwie hat das 2 Array eine "Unterschicht" zu viel glaube ich oder?
          lasse ich aber bei derdefinition wie oben angegeben [] Klammern weg, dann macht php kein array

          Fehlermeldungen beim ausführen von diesem Teil:

          PHP-Code:
          for($i 1$i <= $anzahl_zeilen$i++)
                 {
                 
          $unterschied[] = array_diff ($neue_werte_array[$i],$alte_werte_array[$i]);
                 } 
          sind diese:

          Warning: array_diff() [function.array-diff]: Argument #1 is not an array in

          Denke mal das irgend eine Definition eines Ararays falsch ist. Ka wo

          Kommentar


          • #6
            probier mal
            PHP-Code:
            $neue_werte_array[] = array(MYROW => $i,
                                                             
            s1 => $_POST["x_s1$i"],
                                                             
            s2 => $_POST["x_s2$i"],
                                                             
            s3 => $_POST["x_s3$i"],
                                                             
            s4 => $_POST["x_s4$i"]); 
            Ich denke, also bin ich. - Einige sind trotzdem...

            Kommentar


            • #7
              Jo. Das klappt jetzt soweit.

              Habe mich jetzt füR eine andere Lösung entschieden.

              1te for schleife durchläuft alle betroffenen Zeilen
              2te for schleife durchläuft die pro zeile betroffenen Spalten.
              darin enthalten if anweisung die prüft ob Werte gleich sind.
              erstelle dann ein array($updatenummern) mit nummern, wo sich
              Werte unterscheiden.

              Das klappt soweit.

              Nun habe ich folgendes Problem:

              Da man ja in einer Zeile auf meiner Maske z.B 2 Werte gleichzeitig
              editieren kann taucht die nummer dann auch 2 Mal in meinem Array
              ($updatenummern) auf. Da ich alle nummern nur einmal möchte, schreibe ich:

              $update_nummern = array_unique($update_nummern);

              Das funzt auch noch. Jedoch sind die Keys nun in meinem Array nicht von 0
              lückenlos aufgezählt sondern sehr "sprunghaft".

              Verwende ich nun:

              $update_nummern[] = sort($update_nummern);
              Sortiert er sie zwar richtig, aber er hängt am Ende immer!! ein weiters Element mit der nummer 1 an.

              Warum?

              Die Elemente der if anweisung der sich unterscheidenden Werte generiert diese 1 nicht.

              Kommentar


              • #8
                Dat is echt dähhhhhhhhhhhhhhhhhmlich.

                Schreibe ich statt

                $update_nummern[] = sort($update_nummern);
                dieses
                sort($update_nummern);

                also ohne das array davor, dann funzt es.

                Kommentar


                • #9
                  Du bist dir ganz sicher, dass folgende Zeile keinen Array erzeugt? (Es ist deine von oben, nur ohne die [], dafür mit ' um die Keys. MYROW ist hoffentlich eine Konstante.)
                  PHP-Code:
                  $neue_werte_array = array(
                      
                  $i => array(MYROW => $i,
                          
                  's1' => $_POST["x_s1$i"],
                          
                  's2' => $_POST["x_s2$i"],
                          
                  's3' => $_POST["x_s3$i"],
                          
                  's4' => $_POST["x_s4$i"]
                      )
                  ); 

                  Kommentar


                  • #10
                    Nein, war mein Fehler,

                    Die Funktion erwartete 2 Werte(Arrays)

                    habe ich jedoch keine änderung vorgenommen wurde das array gar nicht erzeugt. Da lag der Fehler. Hab mich in die irre führen lassen.

                    Es erzeugt doch ein Array.

                    Myrow bekommt den Wert $i einer forschleife. Somit werden die Elemente duchnummeriert.

                    Kommentar

                    Lädt...
                    X