Steve: Variablennamen dynamisch ändern?

Hallo Forumler!

kleines Problem:
Ich bekomme per URL eine VAR übermittelt:
zB: www.domain.de/index.php?page=fussball

nun soll in die Index.php aufgrund der VAR bestimmte andere VARs gewählt werden.
zB:

if ($page == fussball) {
 $aktuell[titel] = $fussball[titel];
 $aktuell[text] = $fussball[text];
usw.
}

kann ich nicht irgendwie die Namen dynamisch ersetzen??
also etwa so:

$aktuell[titel] = $[-$page-][titel] //wobei [-$page-] aber den VAR-Namen ersetzt!?

Ich hoffe das kapiert jetzt irgendwer - is schwer zu erklären... ;-)

Grüsse aus Hohenlohe
Steve

  1. Hallo Steve,

    $aktuell[titel] = $[-$page-][titel] //wobei [-$page-] aber den VAR-Namen ersetzt!?

    Bau doch einen zweidimensionalen Array auf:

    $pages = Array(
      "aktuell" => Array(
        "title" => "irgendwas",
        "text" => "nochwas"
      ),
      "fussball" => Array(
        "title" => "blahr",
        "text" => "blub"
      )
    );

    Dann kannst du per $pages["fussball"]["title"] bzw. per $pages["aktuell"]["title"] darauf
    zugreifen.

    Grüße,
     CK

    --
    Ihr wisst nicht, wie man den Menschen dient. Wie sollt ihr wissen, wie man den Goettern dienen soll?
    http://wwwtech.de/
    1. das meinte ich:
      schwer zu verstehen ;-)
      ich versuchs nochmal anderst:

      ich bekomme die VAR $page übermittelt, die hat den wert fussball oder tennis oder golf oder ... (ca 50 werte)

      nun soll die anhand der $page folgende VARs gefüllt werden:

      $ist[titel]
      $ist[text]
      $ist[bild]

      also:
      if ($page == fussball) {
       $ist[titel]= $fussball[titel]
       $ist[text] = $fussball[text]
       $ist[bild] = $fussball[bild]
      }
      elseif ($page == tennis) {
       $ist[titel]= $tennis[titel]
       $ist[text] = $tennis[text]
       $ist[bild] = $tennis[bild]
      }
      elseif ($page == golf) {
       $ist[titel]= $golf[titel]
       $ist[text] = $golf[text]
       $ist[bild] = $golf[bild]
      }
      usw. ca 50 elseif...
      so würde es schon funktionieren, ist doch aber recht umständlich.

      meine Idee war es:
      der wert in $page ist immer identisch mit dem Variablennamen[] der gewählt werden soll, da müsste es doch irgendwie möglich sein zu sagen:

      $ist[titel]= $(---$page---)[titel]
       $ist[text] = $(---$page---)[text]
       $ist[bild] = $(---$page---)[bild]

      wobei die Zeichenfolge (---$page---) dynamisch durch den Wert von $page ersetzt werden soll.

      *selberSchonGanzVerwirrt*

      1. Moin!

        Der Vorschlag von Christian löst dein Problem wunderbar.

        nun soll die anhand der $page folgende VARs gefüllt werden:

        $ist[titel]
        $ist[text]
        $ist[bild]

        Ganz wichtig: Immer Anführungszeichen um die Indices des Arrays setzen.

        also:
        if ($page == fussball) {
         $ist[titel]= $fussball[titel]
         $ist[text] = $fussball[text]
         $ist[bild] = $fussball[bild]
        }
        elseif ($page == tennis) {
         $ist[titel]= $tennis[titel]
         $ist[text] = $tennis[text]
         $ist[bild] = $tennis[bild]
        }

        Wenn du Christians mehrdimensionales Array benutzt. dann hast du - zuerst nur umgesetzt in deinen Code - sowas hier:
        if ($page == "fussball") {
          $ist['titel'] = $werte['fussball']['titel']
          $ist['text']  = $werte['fussball']['text']
          $ist['bild'] = $werte['fussball']['bild']
        }
        elseif...

        Dasselbe für "tennis" und "golf".

        Statt jetzt immer noch tausend ifelseif-Konstrukte zu haben, kannst du die schon mal in der ersten Stufe vereinfachen:

        In $page steht dein Bereich drin:

        $ist['titel'] = $werte[$page]['titel']
        $ist['text']  = $werte[$page]['text']
        $ist['bild'] = $werte[$page]['bild']

        Fertig. Indem der Wert in $page und in der ersten eckigen Klammer identisch sind, mußt du keine Unterscheidung mehr machen.

        Dumm nur, dass du immer noch jeden Wert einzeln übertragen mußt. Doch auch das geht einfacher.

        $ist = $werte[$page]

        Fertig. Der Inhalt von $ist soll ja ein eindimensionales Array sein. Der Inhalt von $werte['fussball'] ist auch ein eindimensionales Array. PHP kennt nämlich gar keine zweidimensionalen Arrays, sondern nur eindimensionale Arrays, die wieder eindimensionale Arrays enthalten. Das hat einige Vorteile. Ob es Nachteile hat, weiß ich nicht, ich bin noch über keinen gestolpert.

        Als dritte Stufe würde ich dann vorschlagen, diese simple Wertzuweisung auch noch zu eliminieren, und einfach überall dort, wo du jetzt die Variable $ist verwendest, einfach $werte[$page] zu benutzen. Suchen/Ersetzen hilft.

        - Sven Rautenberg

        1. puuhhh....

          Vielen Dank für deine (ausführliche) Antwort!
          werde das Morgen mal testen...

          irgendwie waren mir arrays schon immer ein greul.
          muss mich wohl doch mal ernsthaft dahinterklemmen...

          Danke auch an Christian!

          Steve

      2. versuchs so ma ;)

        $ist[titel]= ${page}['titel']

        1. korrektur: so meinte ich es *g* ;)
          $ist[titel]= ${$page}['titel']

          1. $ist[titel]= ${$page}['titel']

            genau danach hab ich gesucht!!!
            eignetlich ganz einfach, gell :o)

            Danke!

            1. Moin!

              $ist[titel]= ${$page}['titel']

              genau danach hab ich gesucht!!!
              eignetlich ganz einfach, gell :o)

              Das ist böse. Variable Variablennamen erscheinen auf den ersten Blick vielleicht ganz schlau, aber man verliert die Kontrolle darüber, welche Variablen auf diese Weise angesprochen werden dürfen.

              Wenn du das Array wie vorgeschlagen anlegst, dann kann dir niemand andere Informationen außer denen, die in diesem Array drinstehen, unterschieben. Bedenke, dass man ja für den URL-Parameter beliebige Werte angeben kann.

              Wenn du den Namen aus $page ungeprüft als Variablennamen akzeptierst, halte ich das für ein unnötiges Risiko. Damit kann man dir alle existierenden Variablen (von denen die Namen der Systemvariablen ja bekannt sind) unterschieben, indem man einfach nur deren Namen für $page angibt.

              - Sven Rautenberg

              1. Wenn du den Namen aus $page ungeprüft als Variablennamen akzeptierst, halte ich das für ein unnötiges Risiko. Damit kann man dir alle existierenden Variablen (von denen die Namen der Systemvariablen ja bekannt sind) unterschieben, indem man einfach nur deren Namen für $page angibt.

                - Sven Rautenberg

                $gut = array("training","sport"); //get parameter checken
                if(in_array($$page,$gut)){
                      $ist[titel]= ${$page}['titel']
                }else{
                       echo "du böse";
                }

                gruss clan ;)

                1. mal wieder ne korrektur *g*

                  so müsste es heissen
                  $gut = array("training","sport"); //get parameter checken
                  if(in_array($page,$gut)){
                        $ist[titel]= ${$page}['titel']
                  }else{
                         echo "du böse";
                  }