2012-07-18 56 views
1

我想要$masking_x充當$masking_y(即動態插入$radiovalue但仍充當變量)。如何將字符串參考轉換爲變量

我的代碼是

while($field_radio = mysql_fetch_assoc($result_radio)) { 
    $radiovalue = $field_radio[radiovalue]; 
    echo "Radio value: ".$radiovalue."</br>"; 
    $masking = "field_masking[checkbox_1001_".$radiovalue."]"; 
    $masking_x = '$'.$masking; 
    $masking_y = "$field_masking[checkbox_1001_2]"; 
    echo "Masking: ".$masking."</br>"; 
    echo "Masking_x: ".$masking_x."</br>"; 
    echo "Masking_y: ".$masking_y."</br>"; 
    die; 

我得到以下輸出:

Radio value: 2 
Masking: field_masking[checkbox_1001_2] 
Masking_x: $field_masking[checkbox_1001_2] 
Masking_y: 2 

任何指導,將不勝感激。提前致謝。

+1

你期望得到什麼? – core1024 2012-07-18 13:08:16

+0

'field_masking'是否也必須是動態的? 'echo $ field_masking [「checkbox_1001 _」。$ radiovalue];''有什麼問題? – Naltharial 2012-07-18 13:09:55

回答

1

如果要動態地訪問一個數組變量,它分爲兩個部分,單變量將無法正常工作。

$name = 'field_masking'; 
$key = 'checkbox_1001_'.$radiovalue; 

echo $$name[$key]; 
+0

謝謝; field_masking不必是動態的,所以Naltharial的$ field_masking [「checkbox_1001 _」。$ radiovalue];解決方案解決我的問題我還從其他評論中學到了很多,我很感謝大家的幫助。再次感謝。 – 2012-07-18 18:43:46

2

您正在使用variable variables有點不對。試試這個:

$radiovalue = $field_radio['radiovalue']; 
echo "Radio value: ".$radiovalue."</br>"; 
$masking_x = "field_masking['checkbox_1001_".$radiovalue."']"; 
$masking_y = "field_masking['checkbox_1001_2']"; 
echo "Masking_x: ".$$masking_x."</br>"; 
echo "Masking_y: ".$$masking_y."</br>"; 

雙美元符號必須在代碼中,而不是在字符串中。

它也可以做到這一點:

$radiovalue = $field_radio['radiovalue']; 
echo "Radio value: ".$radiovalue."</br>"; 
echo "Masking_x: ".${"field_masking['checkbox_1001_".$radiovalue."']"}."</br>"; 
echo "Masking_y: ".${"field_masking['checkbox_1001_2']"}."</br>"; 

還請注意,我說的單引號到您的字符串正確引用用於陣列鑰匙串,關聯數組鍵,這些都是正規字符串,應該被引用因此。

但是重要的是要指出,變量變量很少是給定問題的正確解決方案。通常可以用arraysreferences來代替更好的東西。

編輯

玩了之後,似乎你不能使用變量變量時的關鍵定義是字符串中引用一個數組的鍵。這是一件可怕的事情,我並不感到驚訝,我從來沒有遇到過這個限制。

的長短期的它的是,你不能做什麼你正在嘗試做的,和你最好的解決辦法可能是使用引用來代替:

$radiovalue = $field_radio['radiovalue']; 
echo "Radio value: ".$radiovalue."</br>"; 
$masking = &$field_masking['checkbox_1001_'.$radiovalue]; 
echo "Masking: ".$masking."</br>"; 
$masking = "A different value"; 
echo "Masking: ".$masking."</br>"; 
// Original value has been updated as well 
echo "\$field_masking['checkbox_1001_'.\$radiovalue]: ".$field_masking['checkbox_1001_'.$radiovalue]."</br>"; 
+0

我在所有這些上遇到未定義的錯誤。什麼PHP版本支持? – Naltharial 2012-07-18 13:12:05

+0

@Naltharial使用它後,似乎你不能使用變量來引用數組鍵,當鍵定義在字符串中時。這是一件可怕的事情,我並不感到驚訝,我從來沒有遇到過這個限制。我將編輯我的答案以反映這一點。 – DaveRandom 2012-07-18 13:23:06

+0

謝謝; field_masking不必是動態的,所以Naltharial的$ field_masking [「checkbox_1001 _」。$ radiovalue];解決方案解決我的問題我還從其他評論中學到了很多,我很感謝大家的幫助。再次感謝。 – 2012-07-18 18:44:39

0

看看variable variables。請注意,如果您正在處理用戶輸入,這是一個潛在的安全風險。

你的情況:$masking_x = $$masking;

+0

謝謝; field_masking不必是動態的,所以Naltharial的$ field_masking [「checkbox_1001 _」。$ radiovalue];解決方案解決我的問題我還從其他評論中學到了很多,我很感謝大家的幫助。再次感謝。 – 2012-07-18 18:44:24