2013-01-05 43 views
0

我知道這一定是一個基本問題。我google搜索,但無法找到我正在尋找什麼。PHP動態變量的簡單串聯 - 連接PHP變數

問題: 如何將動態變量加入到現有變量中。

比如...

我的代碼:

<? 

// Gets value from url. In this example c is 1. 

$c = $_GET[c]; 

// Multiple static questions will be pulled from a list. 
// I use two as an example below. 

$Q1 = "Is this question one?"; 
$Q2 = "so this must be question two then?" 

echo "$c: "; 
echo "Q$c"; // returns "Q1" but not the string above. 
echo '$Q.$c"; // returns the val 1 

?> 

現在我猜你看到我的問題。 如何將兩者連接在一起並讓它返回適當的字符串?

謝謝:)

+1

這是您正在運行的確切代碼嗎?你有一些bug - '$ _GET [c]'應該是'$ _GET ['c']',並且你在最後一行有不匹配的引號。請注意,如果你想在一個字符串中使用變量,你需要使用「而不是」。 –

+0

它不是一個bug,但PHP的某種功能 - 首先它尋找c常量,如果它沒有找到 - 它使用它像一個字符串如果有錯誤報告,請注意錯誤 – kirugan

+0

@kirugan是的,一個'功能'像魔術引號和自動提取(不記得實際名稱):p – Corbin

回答

4

取代動態變量名稱,請使用包含多個值的array

$num = $_GET['c']; 

$questions = array(
    "Is this question one?", 
    "so this must be question two then?" 
); 

echo "$num: "; 
echo "Q$num"; 
echo $questions[$num]; 

有很多很多原因喜歡數組"variable variables"。其中之一是,它是不在話下遍歷數組中的所有項目:

foreach ($questions as $num => $question) { 
    echo "Q$num: $question\n"; 
} 

另一個原因是,你可以計算出數組的大小。

echo "There are " . count($questions) . " total questions."; 

另一個是你可以很容易地修改它們。操作數組的方法有lots and lots and lots,這是用變量變量等粗糙工具無法做到的。

// Add a new question to the array. 
$questions[] = 'Question 3: Who are you?!'; 

// Remove duplicate questions. 
$questions = array_unique($questions); 
2

它看起來像什麼你真正需要的是一個array

$questions = array("Question 0", "Question 1", "Question 2"); 
$q = 1; 
echo $questions[$q]; //"Question 1" 

否則,你將不得不使用一些var-var討厭hackiness(唐「T這樣做):

echo ${'Q' . $c}; 

另外,$_GET[c]應該是$_GET['c'],除非c實際上是constant(我希望這不是因爲c將是一個常數可怕的名字)。而且你應該使用isset而不是假設c$_GET


完整的示例存在:

$questions = array("Question 0", "Question 1", "Question 2"); 

$c = (isset($_GET['c'])) ? (int) $_GET['c'] : null; 
if (isset($questions[$c])) { 
    echo "The question is: " . $questions[$c]; 
} else { 
    echo "The question was not found"; 
} 

你或許應該也知道short open tags抽獎背上。如果有服務器將它們禁用,那麼您的所有PHP代碼都將中斷。鍵入3個額外的字符似乎不值得冒這個風險。 (儘管大規模查找/替換<? - ><?php - ><?php當然很容易。)

+0

請注意,不需要int轉換,所有數組鍵都是字符串,所以它會被轉換回字符串。 –

+0

@WouterJ是的,我喜歡避免可能性數組雖然(因爲$ _GET/$ _ POST/etc只能是一個字符串或一個數組),這只是偏執狂:)('?c [] =') – Corbin

+0

真棒回答!你的意思是使用isset? –

0

我不知道我得到了你的意思,但我想這就是前面回答:

<?php 

$var = "Q".$_GET['c']; 

echo $$var; // take care of the double dollar sign 

?> 

但陣列更優選當然

+0

變量變量永遠不是問題的答案,使用數組是解決問題的方法,當你認爲你需要變量var時。 –

+0

他是在問一些非常具體的問題,我沒有給出我給出答案的建議。 – Shehabix

+2

@Shehabox,只是包括有關建議陣列(也許一個例子的音符。沃特可能會刪除downvote。這個網站值修正鄉親基本上是問錯了問題。 –

0

您可以使用PHP eval()之類的函數這個:

eval("echo \$Q$c;"); 

但是你應該小心不要把用戶數據沒有驗證,因爲它可以導致s安全問題。

+0

從技術上講是正確的,但*什麼*?一個數組是適當的解決方案,但即使除此之外,變量變量是一個比eval更好的解決方案。 – Corbin

+0

是不是我投票的人。而且,不是,讓提問者選擇何時可以選擇錯誤的東西。eval有很少的合法用途,這當然不是其中之一。 – Corbin