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


PHP Use variable name in foreach after setting value

编辑:已解决


原始帖子:

我有一个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>';
  }

基本上,这将使用DB中的数据生成表行,但前提是变量的值不为空。

我的问题是:由于我在上面声明了例如$firstname='John',那么代码的第二部分就不再工作了,因为我假设PHP不会将上面的代码片段转换为

if(!empty($firstname))

而是进入

if(!empty(John))

在这种情况下,我如何"强制"PHP再次使用变量NAME而不是其值?

谢谢你的帮助。

编辑:好的,奶酪汉堡的建议奏效了,我认为现在它正在按预期发挥作用。感谢大家的帮助。

编辑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会很好地解决这个问题,只是您错过了_label周围的引号,可能它被读取为常量。

试试这个:

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

其输出为:

John_label: John

演示

我会用完全不同的方式来做,但要回答您的问题,请尝试以下操作:

extract($globalrow);

它在当前作用域中为数组中的每个条目创建变量,这些条目以相应键的名称命名。因此,只要没有数字键,这应该可以代替${$field} = $globalrow[$field];。然后只需按实际名称引用变量即可。

http://php.net/extract