2011-04-26 95 views
1

我定義了幾個變量:$ day_0,$ day_1 ... $ day_8,並且需要用字符串中嵌入的那些天變量來創建一個字符串,這就是我所做的;關於php eval()函數的問題

for($i = 0; $i <=8; $i++) { 
     $d = 'day_'.$i; 
     $day = eval($($d));echo $day; 
     $cmd_line .= 'INPUT'.$i.'='.$quote.$day.$quote.$space; 
} 

但PHP總是抱怨

syntax error, unexpected '(', expecting T_VARIABLE or '$' 

有什麼錯呢?謝謝。

+5

而不是定義命名變量,您應該定義一個數組來保存它們全部。然後你可以很容易地循環訪問數組的內容。除少數情況外,通常不應使用eval。 – dqhendricks 2011-04-26 16:39:21

+0

$ day = array(); $ day [0] ='blah'; $ day [1] ='blah'; foreach($ day as $ value){} – dqhendricks 2011-04-26 16:40:06

+0

eval的這種用法表明您跳過了PHP手冊中的這一重要部分:http://www.php.net/manual/en/language.types.array.php – mario 2011-04-26 16:41:32

回答

1

一個更安全和更容易的解決辦法是使用:

$d = 'day_'.$i; 
$day = $$d; 
+0

護目鏡......他們什麼都不做...... – 2011-04-26 16:40:43

2

無需使用eval

for($i = 0; $i <=8; $i++) { 
     $day = ${'day_' . $i}; 
     echo $day; 
     $cmd_line .= 'INPUT'.$i.'='.$quote.$day.$quote.$space; 
} 

對可變變量的更多信息,請參見PHP Documentation

0

爲什麼不直接使用$$

for($i = 0; $i <=8; $i++) { 
     $d = 'day_'.$i; 
     $day = $$d; //this will point to $day_0 ... 
     echo $day; 
     $cmd_line .= 'INPUT'.$i.'='.$quote.$day.$quote.$space; 
} 
0

我不建議eval(),但如果你想使用它通過有效的PHP代碼作爲參數eval()(串)。

實施例:

$d = 'day_1'; 
$phpcode = "\${$d}='something';"; 
$day = eval($phpcode); 
echo $day_1; 

這將打印出分配給新變量$day_1something

不要忘了在要使用eval()函數進行評估的每條線上添加;

數組將是更好的解決方案。