私は動的変数名を使おうとしています(実際に何が呼ばれているのかよくわかりません)。
for($i=0; $i<=2; $i++) {
$("file" . $i) = file($filelist[$i]);
}
var_dump($file0);
戻り値はnull
です。これは機能していないことを示しています。私が探している構文やテクニックが何であるかは私にはわかりません。そのため研究が困難です。 $filelist
は先に定義されています。
それらを{}
で囲みます。
${"file" . $i} = file($filelist[$i]);
${}
を使うことは動的変数を作る方法です、簡単な例:
${'a' . 'b'} = 'hello there';
echo $ab; // hello there
PHPでは、変数の前に余分な$
を追加して動的変数にすることができます。
$$variableName = $value;
私はそれをお勧めしませんが、この振る舞いを連鎖することさえできます。
$$$$$$$$DoNotTryThisAtHomeKids = $value;
$variableName
を{}
の間に入れることはできますが、強制されません。
${$variableName} = $value;
{}
の使用は、あなたの変数の名前がそれ自身が複数の値の組み合わせである場合にのみ必須です。
${$variableNamePart1 . $variableNamePart2} = $value;
それでも読みやすいので、常に{}
を使用することをお勧めします。
常に{}
を使用するもう1つの理由は、PHP 5とPHP 7では動的変数を扱う方法が少し異なるため、結果が異なる場合があることです。
PHP 7では、動的変数、プロパティ、およびメソッドは、PHP 5の特殊なケースの組み合わせとは対照的に、厳密に左から右の順に評価されるようになりました。以下の例は、評価の順序がどのように変化したかを示しています。
$$foo['bar']['baz']
${$foo['bar']['baz']}
${$foo}['bar']['baz']
$foo->$bar['baz']
$foo->{$bar['baz']}
$foo->{$bar}['baz']
$foo->$bar['baz']()
$foo->{$bar['baz']}()
$foo->{$bar}['baz']()
Foo::$bar['baz']()
Foo::{$bar['baz']}()
Foo::{$bar}['baz']()
{}
の代わりに()
を使ってみてください。
${"file".$i} = file($filelist[$i]);
私はクエリから返された結果に対して非常に頻繁にこれを行います。
例えば.
// $MyQueryResult is an array of results from a query
foreach ($MyQueryResult as $key=>$value)
{
${$key}=$value;
}
$ MyQueryResult ['MyFieldname']ではなく$ MyFieldname(これはエコーステートメントなどのほうが簡単です)を使用できます。
うん、それはおそらく怠惰だが、私は何の問題も抱えていなかった。
Tomもしあなたが既存の配列を持っていれば、その配列をオブジェクトに変換して次のように使うことができます。
$r = (object) $MyQueryResult;
echo $r->key;
()の代わりに{}を使ってみてください。
${"file".$i} = file($filelist[$i]);
私は6つの同一の配列を持っていた立場にいたので、他の変数に応じて正しいものを選び、それに値を代入する必要がありました。ここで示されているケースでは$ comp_catは 'a'だったので、私は 'a'配列を選ぶ必要がありました(もちろん私は 'b'から 'f'配列も持っていました)
配列内の変数の位置の値は右中括弧の後にくることに注意してください。
$ {'comp_cat _'。$ comp_cat .'_ arr '} [1] [0] = "FRED BLOGGS";
$ {'comp_cat _'。$ comp_cat .'_ arr '} [1] [1] = $ file_tidy;
echo '最初の配列値は'。$ comp_cat_a_arr [1] [0]です。 2番目の値は$ comp_cat_a_arr [1] [1]です。
私は動的に作成された変数値と変数のすべての値を組み合わせたための解決策があります。
if($_SERVER['REQUEST_METHOD']=='POST'){
$r=0;
for($i=1; $i<=4; $i++){
$a = $_POST['a'.$i];
$r .= $a;
}
echo $r;
}