PHP - 在foreach循环中分配变量

时间:2012-12-27 12:20:38

标签: php variables variable-variables

我有一个像这样的变量

$profile = $adapter->getProfile();

现在我正在使用它

$profile->profileurl
$profile->websiteurl
$profile->etc

现在我想在foreach循环中使用它

所以我创建了一个这样的数组

$data = array('profileurl','websiteurl','etc');

foreach ($data as $d ) {
${$d} = ${'profile->'.$d};
}

当我使用var_dump(${$d})时,我只看到NULL而不是值。

怎么了?

3 个答案:

答案 0 :(得分:2)

以下代码:

${'profile->'.$d}

应改为:

$profile->{$d};

这将按预期创建变量:

$profile = new stdClass();
$profile->profileurl = "test profileurl";
$profile->websiteurl = "test websiteurl";

$data = array('profileurl', 'websiteurl');
foreach ($data as $d) {
    ${$d} = $profile->{$d};
}

var_dump($profileurl, $websiteurl);
// string(15) "test profileurl"
// string(15) "test websiteurl"

答案 1 :(得分:1)

我的猜测是$profile = $adapter->getProfile();返回一个对象。并且您使用mysql_fetch_object()获取了数据,因此生成的$profile是一个对象

在数组中添加属性时,您必须执行类似这样的操作

$data = array($profile->profileurl, $profile->websiteurl, $profile->etc);

这会杀死这样做的全部想法。所以我建议最好尝试修改$adapter->getProfile()方法以使用mysql_fetch_assoc()返回一个数组,该数组将返回并返回数组,您可以使用

进行迭代
foreach($profile as $key => $value){
    //whatever you want to do
    echo $key .  " : " . $value . "<br/>";
}

答案 2 :(得分:1)

我不确切地知道你为什么要接近foreach。我的假设是,你需要 像变量一样 $ profileurl =&#34; something1&#34;,$ websiteurl =&#34; something2&#34;等等。

$profile = $adapter->getProfile();

现在只需将$ profile对象转换为Array,如下所示,

$profileArray = (array)$profile

然后使用提取功能,

extract($profileArray);

现在,您将变量中的值变为

$profileurl = "something1";
$websiteurl="something2"

然后你可以将它们用作普通的php变量。