Forum: PC-Programmierung PHP, Mehrdimensionales Array, ForEach


von Tim S. (Firma: tsx89) (freak_ts) Benutzerseite


Angehängte Dateien:

Lesenswert?

Guten morgen..,
[Intro:] Ich hab langsam irgendwie die schnautze voll, per PHP ein HTML 
(oder etc...) ausgeben zu lassen! Manchmal vergess ich z.B. paar 
"Html-closing-Tags", weil der PHP-Code mit den vielen 
"HTML-String-Fetzen" dazwischen recht unübersichtlich wird...

[Eigentlich brauche ich immer wieder die selben Ausgaben, insbesondere 
Menüs, und Tabellen.] Desshalb hab ich mich entlich dazu entschlossen, 
ein paar Klassen zu schreiben, die mir diese Ausgaben machen (und damit 
wieder etwas Ordnung in den Code kommt). Die Klassen kann man fast sehen 
wie  "Komponenten" in einer Applikation, z.B eine List-Komponente, oder 
eine Menü-Komponente, (oder etc..)!

Um diese Komponenten mit Daten zu befüllen, hab ich mir eine art 
Data-Provider überlegt! Siehe erster Anhang: BeispielClass.PNG

Derzeit bau ich mir eine Komponente für Tabellen, ... Optisch 
vergleichbar wie die "relativ" großen Tabellen aus PHPmyAdmin..

[Schöne Geschichte...] Nun zum Problem:
Wenn mein DataProvider lücken enthält, dann wird der "rest" einfach 
ignoriert! Siehe zweiter Anhang: GehtNetClass.PNG...

Ich gehe den DataProvider mit forEach durch, bzw hol ich mir vorher den 
count($DataProvider). Wenn jetzt ein paar Einträge im DataProvider 
zwischendrinn fehlen, kann ich sachen wie Count oder ForEach nicht mehr 
benutzen, weil der Count zu niedrig ist, und die Schleife einfach 
aufhört... Das rot eingezeichnete fehlt !!

Mein bisheriger Code ist unbrauchbar, es macht warscheinlich wenig Sinn 
das hier zu Posten. Ich habe versucht den "höchsten" Wert des 
Dataproviders zu bekommen, mit max(); Allerdings komm ich total mit 
meinen verschachtelten Schleifen durcheinader, und hab irgendwie gerade 
eine Denk-Blockade o.ä. Ich komm da einfach nimma weiter ;-D

Ich brauch die maximale Größe der entgültigen Tabelle laut Dataprovider, 
und muss HINTERHER die Schleifen durchlaufen lassen, um die Tabelle 
aufzubauen!?!?!?... Habt ihr da evtl eine Lösung für mich? Kann auch in 
Form eines Templates sein, oder ähnliches...

Ich hoffe das war einigermaßen verständlich, und jemand kann helfen ^^
Gruß

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Tim S. schrieb:
> Meine bisheriger Code ist unbrauchbar, es macht warscheinlich
> wenig Sinn das hier zu Posten
Was spricht dann dagegen gleich eine TemplatEngine wie z.B. Smarty zu 
verwenden? Dann hat man gleich eine passende Trennung zwischen Code und 
Daten (wenn man es den richtig macht).

Tim S. schrieb:
> Allerdings komm ich total mit
> meinen verschachtelten Schleifen durcheinader
Dann solltest du dein Programm besser strukturieren...

Tim S. schrieb:
> kann ich sachen wie Count oder ForEach nicht mehr
> benutzen, weil der Count zu niedrig ist, und die Schleife einfach
Doch, du musst dann nur damit klarkommen das schlüssel fehlen und 
vermutlich die
1
foreach($x as $key=> $value)
Variante nehmen. Die Funktion  array-keys
http://php.net/manual/en/function.array-keys.php
könnte in diesem Zusammenhang auch nützlich sein.

Tim S. schrieb:
> Habt ihr da evtl eine Lösung für mich?
Siehe oben... da was selber zu stricker erfordert etwas Erfahrung, und 
wenn du so schon "durcheinader" kommst...

von Tim S. (Firma: tsx89) (freak_ts) Benutzerseite


Lesenswert?

Läubi .. schrieb:
> Was spricht dann dagegen gleich eine TemplatEngine wie z.B. Smarty zu
> verwenden?

Smarty kannte ich noch nicht ^^. Ich wollte es auch mal ohne Templates 
oder andere fertige Scripts versuchen. (Soll sowas CMS-Mäßiges werden)

Läubi .. schrieb:
> du musst dann nur damit klarkommen das schlüssel fehlen und
> vermutlich die foreach($x as $key=> $value) Variante nehmen. Die Funktion
> array-keys http://php.net/manual/en/function.array-keys.php
> könnte in diesem Zusammenhang auch nützlich sein.

OK, das werde ich mir mal anschauen, verinnerlichen, und anschließend 
ausprobieren! xD

Dankeschön ^^

von D. I. (Gast)


Lesenswert?

Mit Smarty tut man sich wirklich einen Gefallen

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Läubi .. schrieb:
> Was spricht dann dagegen gleich eine TemplatEngine wie z.B. Smarty zu
> verwenden?

Dass Smarty im Grunde eine Neuimplementierung von PHP mit anderer Syntax 
ist...

von Maik M. (myco)


Lesenswert?

So könnte es gehen:
1
$items = array();
2
echo '<table><tr>';
3
4
// lokale Übernahme aller validen Spalten
5
// und Ausgabe des Headers
6
foreach($DataProvider['table'] as $n => $text) {
7
  if (isset($DataProvider['Item'][$n]))
8
    $items[$n] = $DataProvider['Item'][$n];
9
10
  echo '<th>' . $text . '</th>';
11
}
12
echo '</tr>';
13
14
$i = 0;
15
while (!empty($items)) {
16
  echo '<tr>';
17
  foreach($DataProvider['table'] as $n => $dummy) {
18
    if (isset($items[$n]) && isset($items[$n][$i])) {
19
      echo '<td>' . $items[$n][$i] . '</td>';
20
      unset($items[$n][$i]);
21
      if (empty($items[$n]))unset($items[$n]);
22
    } else echo '<td></td>';
23
  }  
24
  
25
  $i++;
26
  echo '</tr>';
27
}
28
echo '</table>';

von Sven (Gast)


Lesenswert?

Ich denke dass Problem ist "<td></td>" -ohne Inhalt werden die Rahmen 
nicht dargestellt, deswegen z.B. mit &#160; ein Leerzeichen erzwingen...
Also "<td>&#160;</td>" ausgeben damit ein leeres Kästchen dargestellt 
wird.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.