2

FORループを使用して、6つまでの連続した名前の変数の存在を確認できるようにしたいのですが、多くの場合、それより少なくなります。

for ($i = 0; $i <= 5; $i++) {
   $vartocheck = "$var_".$i;
   if ($vartocheck) {
      echo $vartocheck." exists!";
   }
}

上記が機能しないことはわかっていますが、$iの値を使用して$var_0から$var_5までの存在を参照および確認する方法を理解できません。

issetとcall_user_funcを使用して、後の変数名を作成して返すようにしましたが、これまでのところ成功していません。

私はevalステートメントを避けようとしています。

4

5 に答える 5

2

(名前で変数の存在を動的にチェックするのは間違っているため)実行しないでください。ただし、次のように実行できます。

isset($$vartocheck);

あなたのコメントに応えて、これはうまくいきます:

<?php
    $var = 'abc';
    var_dump(isset($$var)); // bool(false)
    $abc = 1;
    var_dump(isset($$var)); // bool(true)

$ vartocheck内に特殊文字(空白など)がないかどうか、または変数が実際に文字列であるかどうかを確認してください。

于 2012-11-06T21:20:17.020 に答える
1

あなたが試すことができます

$var_4 = "Test";
for($i = 0; $i <= 5; $i ++) {
    $vartocheck = "var_" . $i;
    if (isset(${$vartocheck})) {
        echo $vartocheck, " exists!";
    }
}

出力

var_4 exists!
于 2012-11-06T21:22:11.163 に答える
1

使用できます$$var_name

コードの変更バージョン:

for ($i = 0; $i <= 5; $i++) {
   $vartocheck = "var_".$i;
   if (isset($$vartocheck)) {
      echo $vartocheck." exists!";
   }
}

ps:配列を使用する場合は+1。

于 2012-11-06T21:23:35.223 に答える
1

最も直接的な方法は次のように見えます:

for ($i = 0; $i <= 5; $i++) {
  if (isset(${"var_{$i}"})) {
    echo ${"var_{$i}"}." exists!";
  }
}

ご了承ください :

$hello = 'world';
$world = 'foo';

$$hello === ${$hello} === ${"world"} === $world === 'foo'.

したがって、元のコードでは、次を使用できます。

for ($i = 0; $i <= 5; $i++) {
   $vartocheck = "var_".$i;
   if (isset($$vartocheck)) {
      echo '$'.$vartocheck." exists!";
   }
}
于 2012-11-06T21:33:25.240 に答える
0

しないでください。名前で変数の存在を動的にチェックすることはお勧めできませんが、必要な場合は、次の方法で行うことができます。

isset($$vartocheck);

ただし、コメントで@ paolo-bergantinoが指摘しているように、このような場合は配列を使用する方がはるかに優れています。

于 2012-11-06T21:24:18.553 に答える