PHP - for() 内部变量的变量或数组

PHP - Variable variables or array for variable inside for()

提问人:Trufa 提问时间:11/19/2010 更新时间:11/19/2010 访问量:409

问:

我有这个代码,用 php 生成一个 HTML 表格:

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

我需要做的是修改变量,以便在 foor 循环时我会得到它,而不是每次:$a1_post_txt$a1_pos_txt

$a1_pos_txt
.
.
$a9_pos_txt

我基本上是我做了什么,但现在变量在另一个变量中,我不知道该怎么做。$numbers["a" . $i . "_pos"]name="a' . $i . '_post"

我希望它足够清楚,如果没有,请要求任何需要的澄清。

提前致谢!!

PHP 数组 循环 变量

评论

4赞 KingCrunch 11/19/2010
您应该改用数组

答:

0赞 Ian P 11/19/2010 #1

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

eval 函数将执行您想要的操作。

评论

0赞 Trufa 11/19/2010
该死的 php 已经关闭了(至少对我来说是这样),我一启动就给它看一下!谢谢!!
0赞 Spudley 11/19/2010
@Trufa - 确认 php.net 已关闭。但是像 uk.php.net 这样的镜子已经竖起来了,所以试试其中一个。
0赞 Trufa 11/19/2010
该网站已启动,看起来不错!谢谢,我会试一试。
0赞 Chemed 11/19/2010 #2

我想你应该用数组替换你的单个变量。 我的意思是,而不是创造

$a 1_pos_txt ... $a 9_pos_txt

你应该有一个数组,你可以在其中使用类似的东西:

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

你在哪里以及如何初始化你的标志变量?

查理

评论

0赞 Chemed 11/19/2010
或者正如 Lan 所说,使用 eval 函数:)
1赞 MatTheCat 11/19/2010 #3

您可以使用动态变量:

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

这将显示“a”。

因此,您可以将变量名称构建为字符串并获取其值!

评论

0赞 Trufa 11/19/2010
是的,我可以,但我无法弄清楚如何为“变量的一部分”$a 1_post_txt(仅更改“1”)执行此操作
0赞 Doon 11/19/2010 #4

https://www.php.net/manual/en/language.variables.variable.php

变量变量将做你想做的事。

2赞 Poonam Bhatt 11/19/2010 #5

使用数组代替变量。在您的数组中将包含 true 或 flase 等值,这些值在 $a 1_pos_txt......$a 9_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 11/19/2010
虽然我不能像这样应用它(因为以前的代码),但这给了我一个好主意(只是稍微修改一下,谢谢)
0赞 Trufa 11/20/2010
谢谢!!我做了一些非常相似的事情,但这正是我所做的!
0赞 Poonam Bhatt 11/22/2010
我希望我的回答能帮助你解决你的问题
1赞 Spudley 11/19/2010 #6

有人建议变量变量 -- 它们太糟糕了!不要使用它们!(它们会使您的代码非常难以阅读和维护,并有可能引入安全问题)。

其他人建议使用 - 绝对不要使用它!(在几乎所有可能的情况下,使用都被认为是非常糟糕的做法;它极有可能引入安全问题)eval()eval

一些人建议使用数组而不是命名变量 - 这是正确的解决方案。

你已经用 做到了,那么你能用 post 变量做类似的事情吗?$numbers

如果它们与你所拥有的 HTML 代码相关,那么你可以将此代码更改为发布变量 - 如下所示:name="a' . $i . '_post"

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

然后,您将有名为 and 等的 post 变量,而不是命名 和 等。然后,遍历它们变得非常容易,因为它们是一个数组。a1_posta2_posta_post[1]a_post[2]