Felix Riesterer: 2x foreach und formatierte Ausgabe

Beitrag lesen

Lieber Fiffi,

generell scheint Deine Vorgehensweise nicht falsch zu sein.

$zahl=array(

array(33),
array(6),
array(5),

  
Warum verpackst Du die Zahlenwerte jeweils in ein Unter-Array? Warum nicht so?  
  
`$zahl = array (33, 6, 5, 4, 7, 2, 55);`{:.language-php}  
  
Das hätte später den Vorteil, dass Du nicht mit `$wert[0]`{:.language-php}, sondern nur mit `$wert`{:.language-php} vergleichen musst. Außerdem ist "zahl" ein denkbar schlechter Variablenname, da er nicht sagt, welchen Sinn die Variable hat.  
  

> $player ist so aufgebaut (Values pro array sind immer 10 Stk):  
  
Aha, und welchen Sinn tragen die jeweiligen Werte?  
  

> ~~~php

$player=array(  

> array('Aas53','1','17','25','7','12','5','33','55','45'),  
> array('Arwen7614','5','7','11','77','18','14','99','17','2'),

Auch ich musste mir einst sagen lassen, dass "sprechende" Indizes grundsätzlich günstiger sind, da man später im Code besser durchblickt. Also in etwa so:

$player = array (  
    array (  
        'name'             => 'Aas53',  
        'Mut'              => 1,  
        'Geschicklichkeit' => 17,  
        'Charisma'         => 25,  
        'Körperkraft'      => 7,  
        'Magie'            => 12,  
        'Angriff'          => 5,  
        'Verteidigung'     => 33,  
        'Erfahrung'        => 55,  
        'Gold'             => 44  
    ),  
    array (  
        'name'             => 'Arwen7614',  
        'Mut'              => 5,  
        ...  
    )  
);

Mein versuch:

foreach ($player as $value){

foreach ($zahl as $wert){
echo "
<tr>

<td>"; echo $value[0]; echo "</td>

<td align=center>"; if ($value[1]== $wert[0]){echo "<font color=red>".$value[1]."</font>";}
else {echo "<font color=white>".$value[1]."</font>";}
echo "</td>

  
Also da graust es mich gewaltig.  
1\.) Keine <font>-Elemente, benutze CSS und class-Attribute um zu gestalten!  
2\.) Da steigt kein Mensch durch die Syntax. Benutze [sprintf()](http://de3.php.net/manual/de/function.sprintf.php)!  
  
~~~php
$html = '<table class="playerlist">'."\r\n";  
foreach ($player as $_player) {  
    $html .= '<tr>';  
    foreach ($zahl as $_zahl) {  
        foreach ($_player as $eigenschaft => $wert) {  
            $html .= sprintf(  
                '<td%s>%s: %02d</td>',  
                ($wert == $zahl ? ' class="besonders"' : ''),  
                $eigenschaft,  
                $wert  
            );  
        }  
    }  
    $html .= "</tr>\r\n";  
}  
$html .= "</table>\r\n";

Wie Du siehst, habe ich die innere Struktur eines jeweiligen Players dazu benutzt, den Aufbau einer Zabellenzeile mittels einer Schleife zu erzeugen. Die Einfärbung geschieht mittels CSS, in welchem der Klasse "besonders" bestimmte Darstellungseigenschaften zugewiesen werden können. Damit kann dann das Aussehen unabhängig vom PHP-Code gesteuert werden, will heißen: Wenn es nicht mehr rot, sondern fett-kursiv-graublau sein soll, dann musst Du den PHP-Code nicht mehr anfassen.

Liebe Grüße,

Felix Riesterer.

--
ie:% br:> fl:| va:) ls:[ fo:) rl:| n4:? de:> ss:| ch:? js:) mo:} zu:)