2017-05-24 93 views
0

我有下面的代碼工作:設置PHP嵌套變量

$apple_color = "red"; 
$pear_color = "green"; 
$banana_color = "yellow"; 
$grape_color = "purple"; 

foreach(array("apple","pear","banana","grape") as $idx=>$fname) { 
    $var = "${fname}_color"; 
    echo "$var = ${$var}<br>".PHP_EOL; 
} 

但是,我無法弄清楚如何消除是$ var變量像這樣縮短了代碼:

foreach(array("apple","pear","banana","grape") as $idx=>$fname) { 
    echo "${fname}_color = ${${fname}_color}<br>".PHP_EOL; 
} 

的 「$ {$ {FNAME} _Color」 返回,說: 「語法錯誤,意外 '_Color'(T_STRING)」

PHP小提琴的PHP錯誤:http://phpfiddle.org/lite/code/wrfp-yqkx

回答

1

這個怎麼樣?使用${'string'}建設

foreach(["apple","pear","banana","grape"] as $fname) { 
    echo "{$fname}_color = ".${$fname.'_color'}."<br>".PHP_EOL; 
} 
+0

感謝 - 這是我去解決。不過 – Scott

0

使用字符串格式化來簡化你的生活:

echo sprintf('$%s_color = %s<br>' . PHP_EOL, $fname, ${$fname . '_color'}); 
1

而不必爲每種顏色獨立的變量,顏色保存在由水果名稱索引的數組。這樣可以避免使用變量變量的混亂。

$colors = [ 
    'apple' => 'red', 
    'pear' => 'green', 
    'banana' => 'yellow', 
    'grape' => 'purple' 
]; 

foreach (["apple","pear","banana","grape"] as $fname) { 
    echo "{$fname}_color = $colors[$fname]<br>".PHP_EOL; 
} 
+0

你的思想工作,在我的情況,我有超過傳遞到我的代碼初始變量名沒有控制權。 – Scott