Zwei Arrays zusamenführen

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

  • Zwei Arrays zusamenführen

    Hallo,

    ich möchte den Inhalt zweier Arrays $A und $B zu einem dritten Array $C zusammenführen. Beide Arrays sind sortiert (rows aus SQL Abfragen). Ich muss für jedes Element prüfen ob als nächstes eins aus $A oder eins aus $B kommt.

    In Pseudocode:

    Code:
    for (i=0, j=0; i<a.length && j<b.length; ) {
    
       // Entscheidung welches Element genommen wird
       if( prüfe( a[i], b[j] ) )
          c.append ( a[i++] )
       else 
          c.append( b [j++] )
    
    }
    // Die restlichen Elemente aus a oder b anhängen
    while(i<a.length)
       c.append ( a[i++] )
    
    while(j<b.length)
       c.append ( b[j++] )
    Die Funktion prüfe() ist trivial. Es geht darum, wie ich durch die assoziativen Arrays iterieren kann. Geht das in PHP 4 irgendwie?

    Kann ich vielleicht die einzelnen Einträge durchnummerieren o.ä?
    Zuletzt geändert von albend; 18.04.2007, 23:11.

  • #2
    zusamneführen
    http://de3.php.net/array_merge
    mfg

    Kommentar


    • #3
      http://www.php.net/manual/de/function.array-merge.php

      durch einen Array gehst du mit foreach($array as $key => $value) oder foreach($array as $value)
      Killerspiele sollten in der Größenordnung von Kinder********************grafie eingeordnet werden.(G. Beckstein)
      - ...und solche Behauptungen in "falsches Resourcenmanagement"

      Kommentar


      • #4
        vorher noch eine frage: was sind das für daten? was macht prüfe()? ich vermute stark, dass man die funktionalität u.u. auf die db verlegen kann.

        Kommentar


        • #5
          Original geschrieben von penizillin
          vorher noch eine frage: was sind das für daten? was macht prüfe()? ich vermute stark, dass man die funktionalität u.u. auf die db verlegen kann.
          Das glaube ich zwar auch, jedoch reichen meine SQL Kenntnisse dafür nicht aus. Etwas vereinfacht (create und modify sind Datumsangaben):

          $a) = select a,modify from x,y order by modify desc
          ->
          bla1, 18.04.2007
          bla2, 15.04.2007
          bla3, 10.01.2007

          $b) = select b,create from x,y order by create desc
          ->
          bla4, 17.04.2007
          bla1, 16.04.2007
          bla5, 12.03.2007

          und das soll rauskommen:

          bla1, 18.04.2007
          bla4, 17.04.2007
          bla2, 15.04.2007
          bla5, 12.03.2007
          bla3, 10.01.2007

          Also chronologisch sortiert und ohne "bla"-Duplikate. Prüfe() prüft also, ob als nächstes ein element aus $a oder aus $b in $c kommt und ob das aktuelle Element aus $a oder $b weggeworfen werden kann.

          @Rest
          Ich verstehe nicht ganz wo ich bei array_merge die Bedingung angeben kann, in welcher Reihenfolge das neue Array aufgebaut werden soll.
          Zuletzt geändert von albend; 18.04.2007, 23:18.

          Kommentar


          • #6
            Hi,

            das kannst und solltest Du definitiv auf die DB verlegen. Nur eine Abfrage machen und mit GREATEST arbeiten. Also nicht create oder modify auswählen, sondern sowas wie

            GREATEST(`modify`,`create`) as ausgabedatum

            Grüße

            Kommentar

            Lädt...
            X