web-dev-qa-db-ja.com

ループでPHP変数名を変更するにはどうすればよいですか?

$ fileという変数とforループがあるとしましょう:for($i=1; $i <= 5; $i++) {}

Forループの反復ごとに、_$i_値が_$file_変数名に追加されるため、forループが終了した後、5つの変数が必要になります:_$file1_、_$file2_、_$file3_、_$file4_、および_$file5_。

26
user701510

$ {'varname'}構文 を使用:

for($i=1; $i <= 5; $i++) {
    ${'file' . $i} = $i;
}

ただし、多くの場合、これの代わりに配列を使用することをお勧めします。

65
Yuri Stuken

isこれを行う方法があります:

for($i = 1; $i <= 5; $i++) {
    ${'file'.$i} = ...;
}

しかし、これを行うのは悪い考えです。なぜそれが悪い考えなのですか?これはarraysが意図されているものだからです。代わりにこれを行ってください:

for($i = 1; $i <= 5; $i++) {
    $file[$i] = ...;
}

(注:配列キーを1ではなく0から開始するのが通常の慣例ですが、そうする必要はありません。)

13
Hammerite

あなたが望むことをすることは可能ですが、その場で変数を作成することはこのような問題を解決するための珍しい方法のようです(私は間違っているかもしれません)

ファイル名を配列に格納することをお勧めします。これにより、後でファイルを簡単に繰り返し処理したり、追加のファイルを追加したりして、ハードコードされた変数名を変更する必要がなくなります。

    $myfiles = array();

    for ($i=1; $i<=5; $i++) {
       $myfiles["file$i"] = "value set in loop";
    }

    //if you want to use the values later
    $file5_value = $myfiles["file5"];

    //if you want to loop through them all
    foreach ($myfiles as $key => $val) {
      echo "$key -> $val\n";
    }
4
bumperbox

配列も使用できます。まったく同じ影響はありませんが、一般に、これらの状況で使用されているように見えます。

for($i=1; $i <= 5; $i++) {
    $file[$i] = $i;
}
2
jeremysawesome

変数変数 に関するPHPのマニュアルを参照してください。

$var_name = '';
for ($i = 0; $i < 5; $i++)
{
  $var_name = 'file' . $i;

  // reference $$var_name now.
  $$var_name = 'foo';
}

var_dump($file1);
var_dump($file2);
var_dump($file3);
var_dump($file4);
var_dump($file5);

デモ

1
Brad Christie