PHP Forum

PHP Forum (http://www.selfphp.de/forum/index.php)
-   PHP für Fortgeschrittene und Experten (http://www.selfphp.de/forum/forumdisplay.php?f=13)
-   -   Mehrdimensionales Array als HTML Tabelle (http://www.selfphp.de/forum/showthread.php?t=21505)

Domi 20.05.2009 10:21:37

Mehrdimensionales Array als HTML Tabelle
 
Hallo zusammen,

schonmal jemand probiert ein mehrdimensionales Array als Tabelle auszugeben? Es reicht ja nicht jeweils nur die nächste Dimension mit count() zu zählen um den Colspan zu ermitteln..

Hat jemand sowas schon fertig, sonst muss ich mich selber dran machen.. :| *gerade in Zeitdruck bin*

THX
Domi

DokuLeseHemmung 20.05.2009 12:16:21

AW: Mehrdimensionales Array als HTML Tabelle
 
Welchen Colspan ?

Sowas ähnliches:

PHP-Code:

function mach_tabelle($tiefe=4)
{
  if ((
$tiefe 1) || ($tiefe >10)) die(" Schachteltiefe falsch!");
  
$rows << $tiefe;
  
$result' <table border="1" cols="'.$tiefe.'" rows="'.$rows.'"> '."\r\n";

  for (
$row 0$row $rows$row++)
  {
    
$result .= '<tr> ';
    for(
$col=0;$col<$tiefe+1;$col++)
    {
      
$rowspan='';
      
$raster << $col;
      
$feld =$rows*$col+$row;
      if (
$col>0$rowspan=' rowspan="'.$raster.'" ';
      if((
$col==0) || (($feld $raster) == 0))
      {
        
$der_neue $row $raster;
        
$result .= "<td $rowspan >Feld: [$col][$der_neue]</td> ";
      }
    }
    
$result .= '</tr> '."\r\n";
  }
  
$result .= '</table> '."\r\n";
  return 
$result;
}

echo 
mach_tabelle(3); 

Nur mit einem Benutzer definierten Array?


Zeige doch mal ein Beispiel Array und wie die fertige Ausgabe aussehen sollte.

Domi 25.05.2009 11:06:46

AW: Mehrdimensionales Array als HTML Tabelle
 
Liste der Anhänge anzeigen (Anzahl: 1)
hi,

also Tabelle sollte so aussehen wie im Anhang.

Array wäre dann z.b. so:

Code:

Array
(
    [key1] => Array
        (
            [key2] => Array
                (
                    [key4] => Array
                        (
                            [0] => wert1
                            [1] => wert2
                            [2] => wert3
                        )

                    [key5] => Array
                        (
                            [0] => wert4
                            [1] => wert5
                            [2] => wert6
                        )

                    [key6] => Array
                        (
                            [0] => wert7
                            [1] => wert8
                            [2] => wert9
                            [3] => wert10
                        )

                )

            [key3] => Array

            // ...

Jedoch ist die tiefe nicht immer gleich ..

DokuLeseHemmung 25.05.2009 12:09:58

AW: Mehrdimensionales Array als HTML Tabelle
 
Schön!
Dass Werte und Subarrays niemals im gleichen Array stecken, machts einfacher.
Ist das wirklich so?


Wenn ja:
Erstmal muß das Array rekursiv durchlaufen werden um maxrow(depth+1) und maxcol(count of values) herauszufinden. Dann müsste man per "backtrace", von den Blättern ausgehend, die jeweiligen colspan und rowspan der Vorgänger berechnen. Evtl. geht das sogar in einem Durchlauf.


Wenn mich gleich mal die Langeweile plagt, dann bastel ich dir sowas...

Ware nett, wenn du das (oder ein paar) Testarray per var_export() zeigen würdest. Das Abtippen ist mir etwas zu blöd.

Domi 25.05.2009 12:34:07

AW: Mehrdimensionales Array als HTML Tabelle
 
Zitat:

Zitat von DokuLeseHemmung (Beitrag 127954)
Schön!
Dass Werte und Subarrays niemals im gleichen Array stecken, machts einfacher.
Ist das wirklich so?

JA!

Zitat:

Zitat von DokuLeseHemmung (Beitrag 127954)
Wenn ja:
Erstmal muß das Array rekursiv durchlaufen werden um maxrow(depth+1) und maxcol(count of values) herauszufinden. Dann müsste man per "backtrace", von den Blättern ausgehend, die jeweiligen colspan und rowspan der Vorgänger berechnen. Evtl. geht das sogar in einem Durchlauf.

Klingt vernünftig. Bin mir allerdigns noch nicht so ganz im klaren, wie ich das am besten machen, dass es auch halbwegs performant ist..

Zitat:

Zitat von DokuLeseHemmung (Beitrag 127954)
Wenn mich gleich mal die Langeweile plagt, dann bastel ich dir sowas...

wäre nett ;) Kleine Testarrays hab ich leider keine mehr, aber kannst ja ganz einfach mit paar Schleifen erstellen, ist ja egal was drinne steht ^^

Gruß
Domi

DokuLeseHemmung 25.05.2009 13:12:06

AW: Mehrdimensionales Array als HTML Tabelle
 
Zitat:

dass es auch halbwegs performant ist..
Da sehe ich schwarz!
Im grunde muß 3 mal rekursiv durchs Array gewackelt werden.
1. berechen der Anzahlen, s.o.
2. fixieren der Struktur (colspan-rowspan)
3. ausgabe in HTML

Der einzige "Beschleuniger" dürfte die konsequente Übergabe per Referenz sein. ansonsten sehe ich da kein Land.

Domi 25.05.2009 14:13:37

AW: Mehrdimensionales Array als HTML Tabelle
 
na gut, dann stellen wir die Performance mal hinten an :)

DokuLeseHemmung 26.05.2009 11:06:16

AW: Mehrdimensionales Array als HTML Tabelle
 
Hier mal eine Zwischenlösung:

PHP-Code:

<style type="text/css">
<!--
table
{
  width: 100%;
  border-collapse: collapse;
}

td
{
  border: thin solid;
  border-color: #000000;
}

//-->
</style>

<?php

 
$array 
= array();
$array['key1'] = array(1,2,3,4,5);
$array['key2'] = array('key3'=>array(1,2,3,4,5,6),'key4'=>array(1,2,3,4,5));
$array['key5'] = array('key8'=>array('key6'=>array(1,2,3,4,5,6),'key7'=>array(1,2,3,4,5)));


function 
displayArray(Array &$array)
{
  
$result  '<table>'//cellpadding="8"
  
foreach($array as $key => &$sub)
  {
    
$result .= '<tr>';
    if(
is_array($sub))
    {
      
$result .= '<td>';
      
$result .= htmlentities($key);
      
$result .= '</td>';
      
$result .= '<td>';
      
$result .= displayArray($sub);
      
$result .= '</td>';
    }else
    {
      
$result .= '<td>';
      
$result .= htmlentities($sub);
      
$result .= '</td>';
    }
    
$result .= '</tr>';
  }

  
$result .= '</table>';
  return 
$result;
}

echo 
displayArray($array);

Es entschpricht nicht ganz deinen Vorgaben, aber das schöne ist, man sieht genau was zusammengehört.
evtl. reicht dir das ja schon...

Domi 26.05.2009 11:17:15

AW: Mehrdimensionales Array als HTML Tabelle
 
unter PHP4 (zumindest in dieser conf mit IIS) funktioniert der Referenzaufruf im foreach nicht. Bin ich froh, wenn dieses Projekt am Ende des Monats abgeschlossen ist und ich wieder auf modernen Systemen entwickeln darf :)

DokuLeseHemmung 26.05.2009 11:22:09

AW: Mehrdimensionales Array als HTML Tabelle
 
Meine Frage war eigentlich, ob dir das so schon reicht?
PHP-Code:

function displayArray($array

  
$result  '<table>'//cellpadding="8" 
  
foreach($array as $key => $sub
  { 
    
$result .= '<tr>'
    if(
is_array($sub)) 
    { 
      
$result .= '<td>'
      
$result .= htmlentities($key); 
      
$result .= '</td>'
      
$result .= '<td>'
      
$result .= displayArray($sub); 
      
$result .= '</td>'
    }else 
    { 
      
$result .= '<td>'
      
$result .= htmlentities($sub); 
      
$result .= '</td>'
    } 
    
$result .= '</tr>'
  } 

  
$result .= '</table>'
  return 
$result


Und die PHP4 Info macht mich ja jetzt etwas dull. Dann kannst ja sowieso mit meinem (noch geheimen) TabellenKlassenGedöns gar nix anfangen.
*anpassungs Arbeit erstmal einstellend*


Alle Zeitangaben in WEZ +2. Es ist jetzt 07:58:41 Uhr.

Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.