Несколько переменных переменных в PHP

#php

#php

Вопрос:

Я довольно новичок в PHP и программировании в целом… Я пытаюсь использовать цикл foreach для установки некоторых параметров на странице, которую я создал. Все это работает, за исключением последнего раздела, где я пытаюсь динамически назначать переменные, чтобы я мог использовать их вне цикла.

 <?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;

?>
  

Когда цикл завершен, должно ли это теперь дать мне шесть переменных?

 $Req_foo
$Status_foo

$Req_bar
$Status_bar

$Req_baz
$Status_baz
  

Я немного поиграл с этим, поиск в Google сегодня кажется бесплодным.

Комментарии:

1. Ради всего святого, пожалуйста, не делайте этого так.

2. возможно, если вы добавите весь свой код, это будет иметь больше смысла… что именно вы пытаетесь сделать?

Ответ №1:

Чтобы получить доступ к некоторому элементу массива, просто получите доступ к некоторому элементу массива.
Циклы не требуются.

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

простой и понятный

Комментарии:

1. Спасибо. Я всегда назначал массивы, которые просто используют номера по умолчанию [0],[1] и т.д. Присвоение имен элементам массива значительно упрощает обращение к ним!

Ответ №2:

Похоже, PHP не любит конкатенацию, когда вы пытаетесь выполнить присваивание. Попробуйте сделать это заранее, вот так:

 <?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;
  

Как предположили другие комментаторы, это не лучшая практика. Попробуйте хранить ваши данные в массиве, а не просто загромождать ваше пространство имен переменными.

Комментарии:

1. Спасибо за помощь! Пример работает… После просмотра этого примера «переменные переменные» щелкнул для меня. Это, а также приведенный выше пример массива просто дали мне лучшую идею о том, как это сделать.

Ответ №3:

Вы могли бы (хотя и не должны!) сделать:

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

Ответ №4:

Переменные переменные так не работают. У вас должна быть одна переменная, содержащая строку.

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

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

Кроме того, не забудьте заключить ваши строки в кавычки:

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

Я не предлагаю использовать переменные переменные, но если вы хотите, вот как это сделать.