Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
Zwei Arrays zusamenführen [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
Zwei Arrays zusamenführen


 
albend
18-04-2007, 18:46 
 
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:


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.ä?

 
hall
18-04-2007, 18:51 
 
zusamneführen

http://de3.php.net/array_merge

 
zerni
18-04-2007, 18:51 
 
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)

 
penizillin
18-04-2007, 18:52 
 
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.

 
albend
18-04-2007, 23:59 
 
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.

 
kuddeldaddeldu
19-04-2007, 01:16 
 
Hi,

das kannst und solltest Du definitiv auf die DB verlegen. Nur eine Abfrage machen und mit GREATEST (http://dev.mysql.com/doc/refman/5.1/de/comparison-operators.html) arbeiten. Also nicht create oder modify auswählen, sondern sowas wie

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

Grüße


Alle Zeitangaben in WEZ +2. Es ist jetzt 21:39 Uhr.