2010-11-19 3 views
1

Я этот код, который генерирует таблицу HTML с PHP: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 так, что когда Foor петли я буду получать вместо $a1_pos_txt каждый раз:

$a1_pos_txt 
. 
. 
$a9_pos_txt 

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

Я надеюсь, что это достаточно ясно, если нет, просьба уточнить необходимые разъяснения.

Спасибо заранее!

+4

Вы должны использовать массив вместо – KingCrunch

ответ

2

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

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

Так код будет выглядеть следующим образом

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

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

for ($i = 1; $i <= 9; $i++) { 
if($arrOfValues[$i] !== TRUE) { 

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

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

+0

Хотя я не могу применить его так же, как это (из-за предыдущего кода), это дало мне хорошую идею (спасибо за небольшую модификацию) – Trufa

+0

Спасибо! Я сделал что-то очень похожее, но в то же время это то, что я сделал! – Trufa

+0

Надеюсь, мой ответ поможет вам в решении вашей проблемы –

0

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

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

+0

Черт, php не работает (по крайней мере, для меня), я даю ему взгляд, как только он поднял вверх! Благодаря!! – Trufa

+0

@Trufa - подтвержденный php.net не работает. Но зеркала, такие как uk.php.net, встают, поэтому попробуйте один из них. – Spudley

+0

Сайт поднял агин, который выглядит хорошо! спасибо, я попробую. – Trufa

0

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

$ a1_pos_txt ... $ a9_pos_txt

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

если ($ MYVAR [$ я] = = true) {...}

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

Charlie

+0

или как говорит Lan использовать функцию eval :) – Chemed

1

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

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

Это будет отображать "а".

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

+0

Да, я мог бы, но я не могу понять, как это сделать для «части переменной» $ a1_post_txt (только с изменением «1») – Trufa

+0

Я обновил, Я думаю, вы лучше поймете. – MatTheCat

1

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

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

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

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

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

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

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