编辑:已解决
原始帖子:
我有一个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