www.mikrocontroller.net

Forum: PC-Programmierung PHP, Mehrdimensionales Array, ForEach


Autor: Tim S. (freak_ts) Benutzerseite
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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ß

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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
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...

Autor: Tim S. (freak_ts) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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 ^^

Autor: D. I. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit Smarty tut man sich wirklich einen Gefallen

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Maik M. (myco)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So könnte es gehen:
$items = array();
echo '<table><tr>';

// lokale Übernahme aller validen Spalten
// und Ausgabe des Headers
foreach($DataProvider['table'] as $n => $text) {
  if (isset($DataProvider['Item'][$n]))
    $items[$n] = $DataProvider['Item'][$n];

  echo '<th>' . $text . '</th>';
}
echo '</tr>';

$i = 0;
while (!empty($items)) {
  echo '<tr>';
  foreach($DataProvider['table'] as $n => $dummy) {
    if (isset($items[$n]) && isset($items[$n][$i])) {
      echo '<td>' . $items[$n][$i] . '</td>';
      unset($items[$n][$i]);
      if (empty($items[$n]))unset($items[$n]);
    } else echo '<td></td>';
  }  
  
  $i++;
  echo '</tr>';
}
echo '</table>';

Autor: Sven (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.