我有一个像这样的变量
$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
而不是值。
怎么了?
答案 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变量。