2011-04-25 7 views
1

Je suis assez nouveau pour PHP et la programmation en général ... J'essaie d'utiliser une boucle foreach pour définir certaines options sur une page que j'ai créée. Tout fonctionne à l'exception de la dernière section, où j'essaie d'assigner des variables dynamiquement, donc je peux les utiliser en dehors de la boucle.Variables variables multiples en PHP

<?PHP 

$array=array(foo, bar, baz); 

foreach ($array as $option) { 

    // I have if statements to determine what $option_req 
    // and $option_status end up being, they work correctly. 

    $option_req="Hello"; 
    $option_status="World"; 

    $rh='Req_'; 
    $sh='Status_'; 

    $$rh.$$option=$option_req; 
    $$sh.$$option=$option_status; 

    } 

echo "<br>R_Foo: ".$Req_foo; 
echo "<br>S_Foo: ".$Status_foo; 
echo "<br>R_Bar: ".$Req_bar; 
echo "<br>S_Bar: ".$Status_bar; 
echo "<br>R_Baz: ".$Req_baz; 
echo "<br>S_Baz: ".$Status_baz; 

?> 

Lorsque la boucle est terminée, cela devrait-il maintenant me donner six variables? J'ai joué avec un peu, les recherches sur Google semblent aujourd'hui infructueuses.

+8

Pour tout ce qui est saint, s'il vous plaît ne le faites pas comme ça. –

+2

peut-être que si vous ajoutez votre code entier, cela aura plus de sens ... qu'essayez-vous exactement de faire? – g19fanatic

Répondre

1

On dirait que PHP n'aime pas la concaténation lorsque vous essayez de faire une affectation. Essayez de le faire à l'avance, comme ceci:

<?php 

$array = array('foo', 'bar', 'baz'); 

foreach ($array as $option) 
{ 
    $option_req="Hello"; 
    $option_status="World"; 

    $rh = 'Req_'; 
    $sh = 'Status_'; 

    $r_opt = $rh.$option; 
    $s_opt = $sh.$option; 

    $$r_opt = $option_req; 
    $$s_opt = $option_status; 
} 

echo "<br>R_Foo: ".$Req_foo; 
echo "<br>S_Foo: ".$Status_foo; 
echo "<br>R_Bar: ".$Req_bar; 
echo "<br>S_Bar: ".$Status_bar; 
echo "<br>R_Baz: ".$Req_baz; 
echo "<br>S_Baz: ".$Status_baz; 

Comme d'autres commentateurs l'ont suggéré, ce n'est pas une bonne pratique. Essayez de stocker vos données dans un tableau, plutôt que d'encombrer votre espace de noms avec des variables.

+1

Merci pour l'aide! L'exemple fonctionne ... Après avoir vu cet exemple "variables variables" cliqué pour moi. Cela, et un exemple de tableau ci-dessus m'a juste donné une meilleure idée sur la façon de le faire. – Colin

3

Pour accéder à un élément de tableau, accédez simplement à un élément de tableau.
Aucune boucle requise.

$req = array("foo" => 1, 
      "bar" => 2, 
      "baz" => 3, 
      ); 
echo $req['foo']; 

pure et simple

+1

Merci. J'ai toujours assigné des tableaux qui utilisent simplement les nombres par défaut [0], [1], etc. Le fait de donner des noms d'éléments de tableau rend cette référence beaucoup plus facile! – Colin

0

Les variables dynamiques ne fonctionnent pas de cette façon. Vous devez avoir une variable contenant la chaîne.

$opt_r = $rh.$option; 
$$opt_r = $option_req; 

$opt_s = $sh.$option; 
$$opt_s = $option_status; 

Aussi, assurez-vous de citer vos cordes:

$array=array('foo', 'bar', 'baz'); 

Je ne suggère pas l'utilisation de variables variables, mais si vous voulez, c'est comment le faire.

1

Vous pouvez (bien que vous ne devriez pas!) Faire:

${$rh.$option} = ...