我需要在变量名中有一个变量,而不是作为变量名


I need to have a variable IN my variable name, not AS my variable name

我该怎么做?

根据PHP.net,

$a = "hi";
$hi = 2;
$$a; // returns 2

然而,我需要:

$i = 2;
$_POST['link$i'];  // I need this to return the same thing as $_POST['link2']

以下是我的代码。

      for ($i = 1; $i <= 40; $i++)
      {
        if(!empty($link$i))
        {
        $link$i = mysql_real_escape_string($_POST['link$i']);
        mysql_query("
          INSERT INTO links (link, rimageid) VALUES
          ('".$link$i."', '".$id."') ");
        } else { }
      }

我这样做的原因是,我有很多文本输入字段将它们的值发布到这个文件中,我想通过for循环定义并插入它们的每个值,而不是手动将每个链接插入mysql。

现在,我得到:

Parse error: syntax error, unexpected T_VARIABLE, expecting ')' in C:'xampp'htdocs'new2.php on line 22

我该怎么做?谢谢

对于数组索引连接,可以,但此代码为

for ($i = 1; $i <= 40; $i++)
      {
        if(!empty($link$i))
        {
        $link$i = mysql_real_escape_string($_POST['link$i']);
        mysql_query("
          INSERT INTO links (link, rimageid) VALUES
          ('".$link$i."', '".$id."') ");
        } else { }
      }

不会像你预期的那样工作,也就是说,命名一个像结果这样的变量是不必要的,你为什么要这样做?PHP并不关心变量名以及它是否与结果相协调。

只需:

for ($i = 1; $i <= 40; $i++)
      {
      if(!empty($_POST['link'.$i]))
      {
        $regular_variable_name = mysql_real_escape_string($_POST['link'.$i]);
        mysql_query("INSERT INTO links (link, rimageid) VALUES ('".$regular_variable_name."', '".$id."') ");
        } else { }
      }

字符串串联怎么样?

$_POST['link'.$i];

由于$link$i无效,您收到语法错误。

如果您希望最终值为link2,那么您需要像Nick Shepherd建议的解决方案。

如果您首先为键创建所需的字符串,则可以更容易地了解发生了什么。

$key = 'link' . $i;

之后,你可以随时使用密钥,在条件类似的情况下

if (!empty($_POST[$key])) {

并且再次出现在您的mysql_escape 中

mysql_real_escape_string($_POST[$key]);
$_POST['link' . $i];

这应该能解决你的问题。对于数组的索引,您可以简单地将要解析的索引的字符串连接起来。

是的。。。你可以做以下

$ = 2;
$link = "link" . $i;
if(isset($_POST[$link])){
     //do something
}

$_POST[$link.$i]

方法也是如此

$type = "Something";
$method = "get" . $type;
$this->$method();   //calls method -> getSomething()