2009-03-20 20 views
2

ok ... phpどのようにすればいいですか?次のシナリオを与えられた:別の変数名から変数を作成するにはどうすればよいですか?

// array of letters 
var $letters = array('a', 'b', 'c'); 
// loop through array and create empty arrays with names like $a, $b, $c 
foreach($letters as $letter) { 
    var $$letter = array(); 
} 
+0

配列がこれには適していませんか? –

+0

[PHPで生成された変数名を使用することはできますか?](http://stackoverflow.com/questions/130240/can-i-use-a-generated-variable-name-in-php) – outis

答えて

3

あなたのコードは、ほぼ正しかったです。 2行目と5行目で 'var'を削除するだけです。

// array of letters 
$letters = array('a', 'b', 'c'); 
// loop through array and create empty arrays with names like $a, $b, $c 
foreach($letters as $letter) { 
    $$letter = array(); 
} 

これは正しく説明したとおりです。私はそれをテストしました。

さらにinformation on variable variables here

これ以外にも、PHPでeval()を使用することをお勧めします。

+0

です。ありがとうございました – ocergynohtna

+0

php.iniの(あなたの開発マシン上で)display_errorsをオンにすることを検討したいかもしれません - 解析エラーを表示するためにそのようにする必要があります。また、PHPのコマンドラインインターフェイスは構文チェックが可能です(つまり、lintと呼ぶことができます)。これはテキストエディタ/ IDEに統合されています。 – thomasrutter

0

チェックアウトのeval()関数:Eval

+0

私はevalを使用することをお勧めします。 eval()が唯一の解決策であるか、あるいは最善の解決策であるという状況はなく、私の意見では、ここでの使用が不合理で、奇妙なことを示唆しています。 – thomasrutter

2

おそらくこれはしたくないでしょう。変数変数を使用したいのは、通常、データ構造や過剰な賢さを理解できないという兆候です。本当にこれをしたいのなら、あなたは何かのように言うことができます...

extract(array_fill_keys($letters, array())); 

...しかし、あなたがしなかった方がいいでしょう。ネストされた配列を使用するほうがはるかに良いアイデアでしょう。特に$nested['a'][] = 5と言うことができ、PHPは配列に値を追加します。あるいは、$varname['key'] = 123と言うこともできます。また、PHPによって自動的に配列が作成されます。

+0

可変変数は実際には非常に便利で強力です。例:Modelインスタンスを生成するためにSQLを戻す列の配列を使用する。 – seanmonstar

+0

seanmonstar - あなたはextract()のようになりますhttp://us.php.net/manual/en/function.extract.php? –

+0

いいえ、私は抽出物のように意味しません。 extractは現在のスコープを変数で埋めるだけです。可変変数を使用すると、配列からモデルインスタンスのプロパティとして値を割り当てることができます。 – seanmonstar

関連する問題