как связать значение переменной с другой переменной в php - PullRequest
0 голосов
/ 11 января 2020

У меня есть 3 массива:

$q1 = ['A', 'B', 'C', 'D'];
$q2 = ['E', 'F', 'G', 'H'];
$q3 = ['I', J', 'K', 'L'];

Когда я нажимаю на кнопку отправить в форме, я сохраняю сеанс и каждый раз, когда нажимаю next, сеанс будет увеличиваться с 1

session_start();
if(!isset($_SESSION['i']))  {
    $_SESSION['i'] = 0;
}
if(isset($_POST['next'])){
    $_SESSION['i']++;       
}

$session = $_SESSION['i'];
echo $session;

Теперь я хочу привязать значение сеанса к переменной $q

Итак, после 1 отправки $q должно стать $q1, после второй отправки; $q должно стать $q2 и так далее ...

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

(я хочу использовать это для создания динамической c формы:)

foreach ($q as $key => $value) {
...

Как я могу это сделать?

Ответы [ 3 ]

2 голосов
/ 11 января 2020

Вместо переменных - использовать массив :

// I use explicit indexing, as you start with `i = 1`
$q = [
    1 => ['A', 'B', 'C', 'D'],
    2 => ['E', 'F', 'G', 'H'],
    3 => ['I', 'J', 'K', 'L'],
];

$_SESSION['i'] = 3;
print_r($q[$_SESSSION['i']]);
1 голос
/ 11 января 2020

Рекомендуется

Для этого можно использовать массив PHP.

$arr = [
    1 => ['A', 'B', 'C', 'D'],
    2 => ['E', 'F', 'G', 'H'],
    3 => ['I', J', 'K', 'L'],
];

затем получите к нему доступ:


print_r($arr[$_SESSION['i']]);

Не готов к использованию Arrays? Ну, PHP также позволяет вам использовать динамические c имена переменных, называемые Переменные переменной .

$variableName = "q";
//..... Update the value of i in session.

 $variableName .= $_SESSION['i'];// when i = 1, it becomes q1;

 print_r($$variableName); // notice the $$ in the Variable Name
 // output
 // Array (0 => 'A', 1 => 'B', 2 => 'C', 3 => 'D')

Подробнее о переменных переменных здесь https://www.php.net/manual/en/language.variables.variable.php

1 голос
/ 11 января 2020

Ваш код уже выглядит нормально и почти готов.

Так что я использую другой array, в котором хранятся все остальные arrays.

Если вы теперь получите переменную $session, вы можете получить доступ к массиву-обертке и получить нужный массив c. Поскольку вы начинали имена массивов с 1, но массивы вызывались с начального индекса 1, вы должны вычесть - 1.

$q1 = array('A', 'B', 'C', 'D');
$q2 = array('E', 'F', 'G', 'H');
$q3 = array('I', 'J', 'K', 'L');

$wrapper = array($q1, $q2, $q3);

$session = 2;

foreach ($wrapper[$session-1] as $key) {
 //Will output E, F , G H as session is =2
 echo $key;

}
...