2016-12-21 17 views
0

タイトルが正しいタイトルであるかどうかわかりませんが、達成しようとしているものを呼び出す方法がわかりません。 | 55:whileループでPHP変数を組み合わせる

$var1 = "55"; 
$var2 = "66"; 
$var3 = "22"; 
$var4 = "22"; 
$x = 1; 
$result = "null"; 

while($x < 5) { 
$result = "$" . "var" . "$x"; 
echo $result; 
echo " | "; 
$x = $x +1; 
} 

は、取得するために期待していた:表面上では、私は次のコードを書いた...

をかなりシンプルに見えます66 | 22 | 22

代わりに私は得ています: $ var1 | $ var2 | $ var3 | $ var4 |

私は多くのことを試みましたが、実際の解決策を見つけることができませんでした。どんな助けにも近づくはずです。

+0

[。ただ、配列を使用する](http://php.net/manual/en/language.types.array.php) – PeeHaa

+0

あなたはその文字列を '$ var1'の値に評価することを意味するときに' $ var1'という文字列を作成しています。私はあなたがあらかじめ扱う変数名を知らないと思います。しかし、未知の入力ストリームに対して 'eval'を使うのは悪い方法です。 @PeeHaaが言ったように、配列を使ってそれらを繰り返します。 – amenadiel

+0

配列は素晴らしいアイデアですが、この場合は配列なしで動作させる方法を実際に探したいと思います。上のコードは、私がしようとしているものの単純化されたバージョンであり、4つの異なる配列を含んでいます。私は問題をエミュレートするこのストリップダウンコードを投稿する方が簡単だと考えました。 – badatz

答えて

5

はここにこの文を参照してください。ありがとう、

$result = "$" . "var" . "$x"; 

$result変数は実際には文字列です。値を取得するには、variable variablesを使用してください。また、あなたのアプローチでは最後に|が追加されることになります。だから、

while (true) { 
    $result = "var" . $x; 
    echo $$result; 
    if($x++ == 4) break; 
    echo " | "; 
} 

ここで私は、さらに、同様@freginoldのソリューションに見てくださいdemo


だこれは、以下の方法であなたのwhile()ループを変更する、あなたの望ましい結果を達成するためにあなたのニーズに合わせて若干修正しました。 5$xを初期化し、次のようにあなたのwhile()ループを変更、

$output = ""; 
while (--$x) { 
    $result = "var" . $x; 
    $output = $$result . " | " . $output; 
} 
echo rtrim($output, " | "); 

をこのソリューションでは、ループから出てくる一方で、あなたがダウントリムする必要が終わり、で|余分を取得してしまいますrtrim()機能を使用します。

は、ここで配列は、より良い仕事とdemo

+1

これはこれまでのところ最良の解決策です。初期化に '$ output =" ";'を入れてwhileループをこれに変更することでコードをさらに圧縮することもできます:while( - $ x){ $ result = "var" "$ x"; $ output = $$ result。 "|"$出力; } '最後に' echo $ output; 'と入力します。 – freginold

+0

@freginold良い試み、;-)しかし、私は今気づいたあなたのコードに1つの欠陥があります。あなたのメソッドでは、 '$ x'を' 5'で初期化すると、要素は逆順で出力されます。 –

+0

もちろん、 '$ x = 1;'を '$ x = 5; 'に変更する必要があります。 – freginold

0

ですか?

<?php 

    $vars = array( 
    'var1' => 55, 
    'var2' => 66, 
    'var3' => 22, 
    'var4' => 22 
    'x' => 1 
); 

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

?> 
1

whileループせずに別の解決策:

$var1 = "55"; 
$var2 = "66"; 
$var3 = "22"; 
$var4 = "22"; 

$vars = array($var1, $var2, $var3, $var4); 
echo implode(' | ', $vars); 
関連する問題