0

我有一个像这样的变量

$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而不是值。

怎么了?

4

3 回答 3

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"
于 2012-12-27T12:27:26.107 回答
1

我的猜测是$profile = $adapter->getProfile();返回一个对象。而且您已经使用获取数据,mysql_fetch_object()因此结果$profile是一个对象

当您在数组中添加属性时,您将不得不做这样的事情

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

这将扼杀这样做的整个想法。所以我建议最好尝试修改$adapter->getProfile()方法以返回一个数组,使用mysql_fetch_assoc()which 将返回和数组,您可以使用它来迭代它

foreach($profile as $key => $value){
    //whatever you want to do
    echo $key .  " : " . $value . "<br/>";
}
于 2012-12-27T12:33:41.740 回答
1

我不知道你为什么要接近 foreach。我的假设是,您需要像 $profileurl = "something1", $websiteurl="something2" 等变量。

$profile = $adapter->getProfile();

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

$profileArray = (array)$profile

然后使用提取功能,

extract($profileArray);

现在你得到变量中的值

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

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

于 2012-12-27T12:40:19.643 回答