213

動的変数名を使用しようとしています (実際に何と呼ばれているかはわかりません)。しかし、ほぼ次のようになります。

for($i=0; $i<=2; $i++) {
    $("file" . $i) = file($filelist[$i]);
}

var_dump($file0);

戻り値はnull、それが機能していないことを示しています。探している構文や手法がここにあるのかどうかわからないため、調査が困難です。$filelistは以前に定義されています。

4

8 に答える 8

564

それらを包みます{}

${"file" . $i} = file($filelist[$i]);

実例


使用${}は動的変数を作成する方法であり、簡単な例です。

${'a' . 'b'} = 'hello there';
echo $ab; // hello there
于 2012-02-13T08:35:23.767 に答える
97

概要

PHP では、変数の前にエクストラを置くだけ$で、動的変数にすることができます。

$$variableName = $value;

お勧めしませんが、この動作を連鎖させることもできます。

$$$$$$$$DoNotTryThisAtHomeKids = $value;

$variableName次の間に配置することはできますが、強制されるわけではありません{}

${$variableName} = $value;

使用{}は、変数の名前自体が次のように複数の値の構成である場合にのみ必須です。

${$variableNamePart1 . $variableNamePart2} = $value;

それでも{}、読みやすいので、常に を使用することをお勧めします。

PHP5 と PHP7 の違い

を常に使用するもう 1 つの理由{}は、PHP5 と PHP7 では動的変数を処理する方法がわずかに異なり、場合によっては異なる結果になることです。

PHP7 では、動的変数、プロパティ、およびメソッドは、PHP5 で特殊なケースが混在していたのとは対照的に、厳密に左から右の順序で評価されるようになりました。以下の例は、評価の順序がどのように変化したかを示しています。

ケース 1 :$$foo['bar']['baz']

  • PHP5 解釈:${$foo['bar']['baz']}
  • PHP7 解釈:${$foo}['bar']['baz']

ケース 2 :$foo->$bar['baz']

  • PHP5 解釈:$foo->{$bar['baz']}
  • PHP7 解釈:$foo->{$bar}['baz']

ケース 3 :$foo->$bar['baz']()

  • PHP5 解釈:$foo->{$bar['baz']}()
  • PHP7 解釈:$foo->{$bar}['baz']()

ケース 4 :Foo::$bar['baz']()

  • PHP5 解釈:Foo::{$bar['baz']}()
  • PHP7 解釈:Foo::{$bar}['baz']()
于 2016-03-03T12:43:24.060 に答える
22

{}の代わりに使用してみてください():

${"file".$i} = file($filelist[$i]);
于 2012-02-13T08:36:17.923 に答える
6

クエリから返された結果に対してこれを頻繁に行います..

例えば

// $MyQueryResult is an array of results from a query

foreach ($MyQueryResult as $key=>$value)
{
   ${$key}=$value;
}

$MyQueryResult['MyFieldname'] ではなく、$MyFieldname (echo ステートメントなどで簡単に使用できます) を使用できるようになりました。

ええ、おそらく怠け者ですが、問題が発生したことはありません。

于 2013-01-16T06:03:13.077 に答える
3

トム 既存の配列がある場合は、その配列をオブジェクトに変換して、次のように使用できます。

$r = (object) $MyQueryResult;
echo $r->key;
于 2013-05-30T19:14:11.160 に答える
1

動的に作成された変数値と、変数内のすべての値を組み合わせたソリューションがあります。

if($_SERVER['REQUEST_METHOD']=='POST'){
    $r=0;
    for($i=1; $i<=4; $i++){
        $a = $_POST['a'.$i];
        $r .= $a;
    }
    echo $r;
}
于 2015-05-12T16:45:56.373 に答える
0

私は6つの同一の配列を持っている立場にあり、別の変数に応じて正しい配列を選択し、それに値を割り当てる必要がありました。ここに示されている場合、$comp_cat は 'a' だったので、'a' 配列を選択する必要がありました (もちろん、'b' から 'f' 配列もありました)。

配列内の変数の位置の値は右中括弧の後にあることに注意してください。

${'comp_cat_'.$comp_cat.'_arr'}[1][0] = "フレッドのブログ";

${'comp_cat_'.$comp_cat.'_arr'}[1][1] = $file_tidy;

echo '最初の配列値は '.$comp_cat_a_arr[1][0]' です。2 番目の値は .$comp_cat_a_arr[1][1]; です。

于 2015-11-10T20:33:07.910 に答える