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

时间:2014-04-24 11:14:04

标签: php foreach

编辑:已解决


原始邮件:

我有一个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循环中。

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

2 个答案:

答案 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];。然后只需按实际名称引用变量。

http://php.net/extract