Arrayproblem !?

firstlord18

Erfahrenes Mitglied
Edit: Mist, alle überflüssigen Leerzeichen wurden gelöscht. Wie kann man das ändern, sodasss es bessrr und übersichtlicher ist?
Edit²: achso ich muss statt quote-Tags PHP-Tags nutzten. Ich änder das gerade mal!


Hallo,

ich habe ein Array. Die Elemente davon sehen in etwa wie folgt aus:

PHP:
        Array (
           [0] => 	 "bild5.jpg||127.77.189.50||12377289123||5||gallery1",
           [1] =>	   "bild1.jpg||127.66.189.50||12376289123||1||gallery4",
           [2] =>	   "bild2.jpg||127.77.189.50||12377289123||3||gallery1"
           [3] => 	 "bild1.jpg||127.77.189.50||12312289123||3||gallery2"
           etc ...
        )

Nun möchte ich die Daten in ein neues multidimensionales Array schreiben, sodass danach das wie folgt aussieht:

PHP:
        Array (
       [127.77.189.50] => array(
     	 gallery1 => array (
     		[0] => "bild5.jpg||12377289123(timestamp)||5",
     		[1] => "bild2.jpg||12377289123(timestamp)||3"
     	 )
     	 gallery2 => array (
     		 [0] => "bild1.jpg||12312289123(timestamp)||3"
     	 )
           )
       [127.66.189.50] => array (
     	 gallery4 => array (
     		  [0] => "bild1.jpg||12376289123(timestamp)||1",
     	  )
        )
         )

Oder gibt es vielleicht eine bessere Sturktur?

Am Anfang habe ich eben ein gemixtes Array wie im 1. Beispiel, und was am Ende rauskommen soll, ist eine Tabelarische Auflistung, die wie folgt gestaltet sein soll (ich nehme nun nicht mehr die Daten, die ich im 1 und 2 Beispiel genutzt habe):
PHP:
        Tabelle:
      123.42.56.01-gallery1-123433123 (timestamp)-bild 1.gif
   			    172379377 (timestamp)-bildn.jpg
    		      gallery4-123810532 (timestamp)-wein.jpg
    		      gallery6-123676292 (timestamp)-wenig.gif
      42.21.05.120-gallery1-123151223 (timestamp)-hallo.gif
        
        etc...
Also in der Tabelle sollen das nun 4 Spalten sein (IP - Gallery - Timestamp - Bild)!

Vielen Dank fürs lesen und helfen ;)
 
Zuletzt bearbeitet:
Ich denke es waere dazu sinnvoll die jeweiligen Eintraege im Array einzeln per explode() zu einem Array umzuformen.
Dort kannst Du dann die einzelnen Elemente pruefen.
Beispiel: (ich nutz dafuer mein Dein Array und nenn es $bilder)
PHP:
Array (
     [0] =>      "bild5.jpg||127.77.189.50||12377289123||5||gallery1",
     [1] =>      "bild1.jpg||127.66.189.50||12376289123||1||gallery4",
     [2] =>      "bild2.jpg||127.77.189.50||12377289123||3||gallery1"
     [3] =>      "bild1.jpg||127.77.189.50||12312289123||3||gallery2"
     etc ...
  )

PHP:
for ($x=0;$x<count($bilder);$x++)
 {
  $bildarray=explode("||",$bilder[$x]);
  $gallerie[$bildarray[1]][$bildarray[4][]=$bildarray[0]."||".$bildarray[2]."||".$bildarray[3];
 }
Dann sollte $gallerie eigentlich so aussehen wie Du's willst.
Ich geb aber keine Garantie drauf, hab's nicht getestet, nur grad so runtergetippt.
 
Edit: Ups, ich habe ja auch das falsche Trennzeichen ... einen Moment!
Edit2: ja ich habe nun das richtige Trennzeichen in der for Schleife eingesetzt, und ich glaube es funktioniert jetzt richtig. Dankeschön!
 
Zuletzt bearbeitet:
So, nun habe ich leider noch ein paar Probleme bei der Auflistung. Ich möchte es ja wie oben beschrieben gelistet hjaben, weiß aber nicht, wie ich es mache, dass er mir z.b. falls mehrere gallerys vorhanden sind, einfach in eine neue Zeile schreibt und das erste Feld für die IP leer lässt, bzw wenn mehrere Bilder zu einer Gallery vorhanden sind, dass diese dann mit Timestamp und Clicks gelistet werden, aber ohne nochmal die IP und die Gallery anzuzeigen. Mein vorhandener Code:

PHP:
  echo "<table border=\"1\" width=\"600\">";
  foreach($gallerie as $ip => $unterarray) {
  	
  	echo "<tr><td>".$ip."</td>";
  	
  	foreach($unterarray as $gallery => $unterindizes) {
  		
  		echo "<td>".$gallery."</td>";
  		
  		foreach($unterindizes as $id => $bild_timestamp_clicks) {
 						
  			$e = explode("::", $bild_timestamp_clicks);
  			$bild = $e[0];
  			$time = $e[1];
  			$count= $e[2];
  			
 			echo "<td>".$bild."</td><td>".$time."</td><td>".$count."</td>"; 
  		}
  	}
  	echo "</tr>";
  }	
  echo "</table>";

gibt folgendes aus (ich habe auch mal print_r($gallerie) gemacht, dass Ihr die vorhandenen Einträge seht!):
www.nsane.de/fileHOST/statistik.php.htm

Danke im vorraus!


Edit: schnell sieht man, dass eigentlich z.b. bei der IP 195.93.60.82 in der Tabelle die ersten 2 Spalten rfei bleiben müssten, und die 3 Spalten (die atm noch hinten dran sind) eigentlich eine Zeile runtergerückt werden müssten!
 
Falls es mjmd funktioniert, wie man solche verschachtelten Tabellen lößt (mit einer Zählervariable):

PHP:
 echo "<table border=\"1\" width=\"700\">";
 echo "    <tr><td><b>IP</b></td><td><b>Gallery</b></td><td><b>Bild</b></td>
 	    <td><b>Zeit</b></td><td><b>Clicks</b></td></tr>";
 foreach($gallerie as $ip => $unterarray) {
 	
 	echo "<tr><td>".$ip."</td>";
 	
 	$n = 0;
 	foreach($unterarray as $gallery => $unterindizes) {
 		
 		if($n > 0) {
 			echo "<tr><td>&nbsp;</td>";
 		}
 		
 		echo "<td>".$gallery."</td>";
 		
 		$x = 0;
 		foreach($unterindizes as $id => $bild_timestamp_clicks) {
 			
 			if($x > 0) {
 		    	echo "<tr><td>&nbsp;</td><td>&nbsp;</td>";
 			}
 			
 			$e = explode("::", $bild_timestamp_clicks);
 			$bild = $e[0];
 			$time = $e[1];
 			$count= $e[2];
 			
 			echo "<td>".$bild."</td><td>".$time."</td><td>".$count."</td>";    
 			
 			$x++;
 			
 		}
 		
 		$n++;
 		
 	}
 	echo "</tr>";
 }	
 echo "</table>";
 
Zurück