编辑:已解决
原始邮件:
我有一个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而不是其值?
感谢您的帮助。
编辑:好的,cheezeburgers建议有效,我认为现在它正在按预期工作。感谢各位的帮助。
编辑2:表格行在屏幕上正确输出,例如:
First Name: John
Last Name : Smith
但是由于电子邮件确认中的一些奇怪的原因,输出加倍:
First Name: John
Last Name : Smith
First Name: John
Last Name : Smith
在这两种情况下,我只是用以下方式回复它们:
<?php echo $allrows ?>
其中$ allrows在foreach循环中。
(我将此部分作为一个新问题发布,因为这似乎是一个新问题)
答案 0 :(得分:1)
PHP会很好地完成它,只是你错过了_label
周围的引用,并且可能会将其作为常量读取。
试试这个:
$$field='<tr><td width="50%">'.${$field}.'_label: </td>
<td width="50%">'.${$field}.'</td></tr>';
将输出显示为:
John_label: John
<强> Demo 强>
答案 1 :(得分:-1)
我会完全不同地做到这一点,但要回答你的问题,试试这个:
extract($globalrow);
它在数组中的每个条目的当前范围内创建变量,其中包含相应键的名称。因此,只要没有数字键,这应该起作用而不是${$field} = $globalrow[$field];
。然后只需按实际名称引用变量。