PHP - Переменные переменных или массив для переменных внутри for () - PullRequest
1 голос
/ 19 ноября 2010

У меня есть этот код, который генерирует таблицу HTML с php:

<?php 
include("numbers2.php");

echo '<table border="1">';
 echo '<tr>';

for ($i = 1; $i <= 9; $i++) {
if($a1_pos_txt !== TRUE) {

echo "<td>" . $numbers["a" . $i . "_pos"] . "</td>";

} else {?> 
<?php 
echo '<td><input type="text" name="a' . $i . '_post" size="1" maxlength="1" /></td>';
?>
<?php } }?>

Что мне нужно сделать, это изменить переменную $a1_post_txt, чтобы вместо * 1005 я получал ее, когда цикл будет повторяться* каждый раз:

$a1_pos_txt
.
.
$a9_pos_txt

Я в основном то, что я сделал с $numbers["a" . $i . "_pos"] и name="a' . $i . '_post", но теперь, когда переменная находится внутри другой переменной, я не знаю, как это сделать.

Надеюсь, это достаточно ясно, если нет, попросите, пожалуйста, пояснений.

Заранее спасибо !!

Ответы [ 6 ]

2 голосов
/ 19 ноября 2010

Вместо переменной используйте массив.В вашем массиве будут содержаться значения типа true или flase, которые были ранее в $ a1_pos_txt ...... $ a9_pos_txt

$arrOfValues[1] = TRUE;
$arrOfValues[2] = FALSE;
 ......
 .....
 ...
$arrOfValues[9] = TRUE;

Так что код будет выглядеть так1007 *

1 голос
/ 19 ноября 2010

Кто-то предложил переменную переменную - они ужасны! Не используйте их! (они могут сделать ваш код очень трудным для чтения и сопровождения и могут привести к проблемам с безопасностью).

Кто-то еще предложил использовать eval() - определенно не используйте это !! (использование eval считается очень плохой практикой практически во всех возможных ситуациях; весьма вероятно для введения проблем безопасности)

Несколько человек предложили использовать массив вместо именованных переменных - это правильное решение.

Вы уже сделали это с $numbers, так что вы могли бы сделать что-то подобное с переменными post?

Если они связаны с HTML-кодом, который у вас есть name="a' . $i . '_post", вы можете изменить этот код, чтобы вместо него публиковать переменные - что-то вроде этого:

name="a_post['.$i.']"

Тогда вместо того, чтобы иметь переменные записи с именами a1_post и a2_post и т. Д., У вас будут переменные с именами a_post[1] и a_post[2] и т. Д. Затем их будет очень легко перебирать, поскольку они являются массивом.

1 голос
/ 19 ноября 2010

Вы можете использовать динамические переменные:

<?php
    $test = 'a';
    echo ${'test'}; 
?>

Появится «а».

Таким образом, вы можете построить имя переменной в виде строки и получить ее значение!

0 голосов
/ 19 ноября 2010

http://us2.php.net/manual/en/language.variables.variable.php

Переменные Переменные будут делать то, что вы хотите ..

0 голосов
/ 19 ноября 2010

Полагаю, вам следует заменить единственную переменную на массив.Я имею в виду, вместо создания

$ a1_pos_txt ... $ a9_pos_txt

у вас должен быть массив, где вы можете использовать что-то вроде:

if ($ myVar [$ i]! == true) {...}

Где и как вы инициализируете переменные своего флага?

Чарли

0 голосов
/ 19 ноября 2010

http://php.net/manual/en/function.eval.php

Функция eval будет делать то, что вы хотите.

...