#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');
Я не предлагаю использовать переменные переменные, но если вы хотите, вот как это сделать.