PHP在设置值后在foreach中使用变量名

PHP在设置值后在foreach中使用变量名,php,foreach,Php,Foreach,编辑:已解决 原职: 我有一个foreach循环,它以以下形式创建变量: foreach ($fieldsarray as $field) { ${$field} = $globalrow[$field]; } 这将使用数组元素创建变量,如$firstname、$lastname等 现在,由于这些变量的值是从DB中获取的,所以我不能在同一个foreach中再次使用变量名。我想做的是在循环中使用它: if(!empty($$field)) {

编辑:已解决


原职:

我有一个foreach循环,它以以下形式创建变量:

    foreach ($fieldsarray as $field)
    {
        ${$field} = $globalrow[$field];
    }
这将使用数组元素创建变量,如$firstname、$lastname等

现在,由于这些变量的值是从DB中获取的,所以我不能在同一个foreach中再次使用变量名。我想做的是在循环中使用它:

if(!empty($$field)) 
  {
    $r.$field='<tr><td width="50%">'.${$field}._label.': </td>
    <td width="50%">'.${$field}.'</td></tr>';
  }
而是

if(!empty(John))
在这种情况下,如何“强制”PHP再次使用变量名而不是其值

谢谢你的帮助

编辑:好的,芝士汉堡的建议奏效了,我想现在它正在按预期工作。谢谢大家的帮助

编辑2:表格行在屏幕上正确输出,例如:

First Name: John
Last Name : Smith
但由于某种奇怪的原因,在电子邮件确认中,输出增加了一倍:

First Name: John
Last Name : Smith
First Name: John
Last Name : Smith
在这两种情况下,我只是简单地用以下方式回应:

<?php echo $allrows ?>

其中$allrows在foreach循环中


(我将把这部分作为一个新问题发布,因为这现在似乎是一个新问题)

PHP会很好地解决它,只是您错过了标签的引用,可能这是一个常量

试试这个:

$$field='<tr><td width="50%">'.${$field}.'_label: </td>
<td width="50%">'.${$field}.'</td></tr>'; 

我的做法完全不同,但要回答您的问题,请尝试以下方法:

extract($globalrow);
它在当前范围内为数组中按相应键的名称排列的每个条目创建变量。因此,只要没有数字键,它就应该工作,而不是
${$field}=$globalrow[$field]。然后只需按实际名称引用变量


呃,这让我头疼,变量不容易阅读。你到底想达到什么目的?我肯定有更好的方法为什么你需要变量?不能使用数组生成表吗?(提示:您可以)如果(!empty($globalrow[$field]),为什么不直接使用
?但我认为它应该像您编写的那样工作。当
$field='firstname'
时,PHP会将
empty($$field)
转换为
empty($firstname)
。你到底为什么要这样做?您已经有了一个包含所有所需信息的变量(数组)。这对Meetly来说毫无意义,但它不应该是John_label:John->我需要它来生成$firstname_label:John-因为我在代码的其他部分将变量$firstname_label声明为$firstname_label='First Name'。你现在看到我的问题了吗?@Al IskanderAl Albani你可以通过简单地将
${$field}
更改为
$field
。好的,更改了,但它仍然没有输出任何内容,因为正如我所说的,我认为问题在于:如果(!empty($$field))@Al IskanderAl Albani你能粘贴
$field
$$field
的值吗?在if之前回显它们。我可以回显它们,它们正确地输出为“firstname”和“John”,但问题仍然在于标签thingy。我可以使用“firstname\u label”或“John\u label”——当然,这两个变量都不会产生任何结果,因为上面的变量名为$firstname\u label。我可以将它与字符串混合,直观地生成“$firstname\U label”-但仅此而已,它不会被解释,它只是按原样输出。
John_label: John
extract($globalrow);