Zur Navigation

Probleme mit Script (generic) [PHP]

1 NeoMiC (Gast)

schönen guten abend allerseits...

bin neu in php (also net schlagen wenn ich was dummes sage *kopfeinzieh*) und habe versucht ein menu (oder mehrere blöcke) mit php zu generieren, bin aber dabei auf ein problem gestoßen:

<?php

$menu0 = array("Titel 1", "Inhalt 1", "Bemerkung 1");
$menu1 = array("Titel 2", "Inhalt 2", "Bemerkung 2");
$menu2 = array("Titel 3", "Inhalt 3", "Bemerkung 3");

do {

$menu = '$menu'.$counter; 

$windowtitle = $menu[0]; //und hier liegt das Problem: es wird als string erkannt (ausgabe bei 0: $, bei 1:m, bei 2:e usw...)
$mainwindow = $menu[1];
$windowbottom = $menu[2];

$windowblock = "<div CLASS=\"filler\"></div><div CLASS=\"windowtitle\">$windowtitle</div><div CLASS=\"mainwindow\">$mainwindow</div><div CLASS=\"windowbottom\">$windowbottom</div>";
echo $windowblock;

$counter += 1;
}              
while ($counter < 3);

?>

wie soll ich dem lieben server sagen das das ein array ist oder wie kann ich das generieren???
gibt es vielleicht auch eine andere lösung???

hilfe wäre nett...

greetz NeoMiC

24.04.2006 21:55

2 C)-(iLL@

Hallo NeoMic,

das wird als Zeichen erkannt, weil Du der Variable $menu in der Zeile vorher einen String zuweist. Wenn Du die Variable hinter dem Variablennamen willst, verwende $$ (doppeltes $). Bei Arrays ist da eine kleine Hürde: Du musst mit {} auszeichnen, was ein Variablenname ist, der durch das vorangegangene $ referenziert werden soll. Den $ im '$menu'.$counter brauchst Du nicht.


$menu = 'menu'.$counter;

$windowtitle = ${$menu}[0]; //und hier liegt das Problem: es wird als string erkannt (ausgabe bei 0: $, bei 1:m, bei 2:e usw...)
$mainwindow = ${$menu}[1];
$windowbottom = ${$menu}[2];


Vielleicht wäre es aber eine bessere Idee, einen mehrdimensionalen Array ($menu = array(array('title1', ... ), array('title2', .. )) zu nehmen, als 3 verschiedene Array-Variablen. Der Code ließe sich dann wahrscheinlich leichter lesen. Auch die Variante $menu[0]=array('title1', ...); $menu[1]=array('title2', ...); würde den Zweck erfüllen, wenn Du ungerne Array-Definitionen schachtelst. Das Referenzieren des Inhalts ginge dann über $menu[$counter][0], die $menu-Variable in der Schleife kannst Du dann aussparen.

Kleiner Edit, weil ich es gerade sehe:

die $counter-Variable sollte vor der Schleife initialisiert werden ($counter=0) - das wäre sauberer (besonders wenn $counter eine Deiner Lieblingsvariablen ist :)) und anstatt
$counter += 1;
}              
while ($counter < 3);

kannst Du schreiben


}              
while ($counter++ < 3);

24.04.2006 22:04 | geändert: 24.04.2006 22:31

3 NeoMiC (Gast)

Yep -pwnd- erstmal ganz großes danke ;-) das mit dem $counter = 0 habsch glatt vergessen^^ aber hier noch die verbesserte version mit einem check ob das nächste array gültig ist:

<?php

$menu0 = array("Titel 1", "Inhalt 1", "Bemerkung 1");
$menu1 = array("Titel 2", "Inhalt 2", "Bemerkung 2");
$menu2 = array("Titel 3", "Inhalt 3", "Bemerkung 3");

$counter = 0;

do {

$windowtitle = ${menu.$counter}[0];
$mainwindow = ${menu.$counter}[1];
$windowbottom = ${menu.$counter}[2];

$windowblock = "<div CLASS=\"filler\"></div><div CLASS=\"windowtitle\">$windowtitle</div><div CLASS=\"mainwindow\">$mainwindow</div><div CLASS=\"windowbottom\">$windowbottom</div>";

echo $windowblock;

$counter++;

}
              
while (${menu.$counter} == true);

?>

24.04.2006 22:39

4 C)-(iLL@

Wenn Du künftig mehrere menüs hinzufügen willst, dann kämst Du hiermit wohl am billigsten davon:

$menu = array();
$menu[0] = array("Titel 1", "Inhalt 1", "Bemerkung 1");
$menu[1] = array("Titel 2", "Inhalt 2", "Bemerkung 2");
$menu[2] = array("Titel 3", "Inhalt 3", "Bemerkung 3");

foreach(array_keys($menu) as $counter) {
  $windowtitle = $menu[$counter][0];
  $mainwindow = $menu[$counter][1];
  $windowbottom = $menu[$counter][2];
  $windowblock = "<div CLASS=\"filler\"></div><div CLASS=\"windowtitle\">$windowtitle</div><div CLASS=\"mainwindow\">$mainwindow</div><div CLASS=\"windowbottom\">$windowbottom</div>";
  echo $windowblock;
}

oder ganz billig:

<?php

$menu = array();
$menu[0] = array("Titel 1", "Inhalt 1", "Bemerkung 1");
$menu[1] = array("Titel 2", "Inhalt 2", "Bemerkung 2");
$menu[2] = array("Titel 3", "Inhalt 3", "Bemerkung 3");

foreach(array_keys($menu) as $counter) {
   ?>
    <div CLASS="filler"></div>
    <div CLASS="windowtitle"><?php echo $menu[$counter][0] ?></div>
    <div CLASS="mainwindow"><?php echo $menu[$counter][1] ?></div>
    <div CLASS="windowbottom"><?php echo $menu[$counter][1] ?></div>
   <?php
}

?>

und am allerbilligsten (aber nicht so schnell wie das vorangegangene, da die ganzen Textblöcke gefetcht werden):

<?php

$menu = array();
$menu[] = array("Titel 1", "Inhalt 1", "Bemerkung 1");
$menu[] = array("Titel 2", "Inhalt 2", "Bemerkung 2");
$menu[] = array("Titel 3", "Inhalt 3", "Bemerkung 3");

foreach($menu as $item) {
  ?>
   <div CLASS="filler"></div>
   <div CLASS="windowtitle"><?php echo $item[0] ?></div>
   <div CLASS="mainwindow"><?php echo $item[1] ?></div>
   <div CLASS="windowbottom"><?php echo $item[2] ?></div>
  <?php
}

?>

24.04.2006 22:50 | geändert: 24.04.2006 23:05

Beitrag schreiben (als Gast)





[BBCode-Hilfe]