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()。これを使用すると、配列が返され、次のように反復できます。

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 に答える