2016-12-21 102 views
0

不知道Title是否是正確的標題,但我不知道如何調用我正在嘗試完成的內容。它看起來相當簡單的表面...在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; 
} 

希望得到: 55 | 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

數組是一個好主意,但在這種情況下,我真的很想找到一種方法使它在沒有數組的情況下工作。上面的代碼是我想要做的簡化版本,它包含四個不同的數組。我認爲發佈這個模擬問題的剝離代碼會更容易。 – badatz

回答

5

這裏看到這個說法,

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

$result變量實際上是一個字符串。要獲得它的價值,請使用variable variables。另外,用你的方法,你最終會得到額外的|。因此,要實現你想要的結果,改變你的while()循環通過以下方式,

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

這裏有一個demo


此外,也考慮@freginold的解決方案,以及,我稍作修改以適應您的需求。初始化$x5和改變你的while()循環通過以下方式,

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

在這個解決方案,而出山的循環,你將最終獲得一個額外的|在最後,你需要修剪下來使用rtrim()函數。

這裏有一個demo

+1

這是迄今爲止最好的解決方案。你甚至可以通過在你的初始化中包含'$ output =「」;'來進一步壓縮你的代碼,然後將'while'循環改爲:while( - $ x){result =「var」。 「$ X」; $ output = $$結果。 「|」。$輸出; }'帶'echo $ output;'結尾。 – freginold

+0

@freginold好的嘗試,;-)但是你的代碼有一個缺陷,我現在注意到了。在你的方法中,元素將以相反的順序打印,因爲我們用'5'初始化'$ x'。 –

+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);