2012-07-17 67 views
0

好了,所以我有這個數組:

$choices = array($_POST['choices']); 

這個輸出,使用的var_dump()時:

array(1) { [0]=> string(5) "apple,pear,banana" } 

我需要的是那些成爲變量的值以及作爲字符串增加值。 所以,我需要的輸出爲:

$apple = "apple"; 
$pear = "pear"; 
$banana = "banana"; 

陣列的價值可能會改變這樣的變量具有取決於什麼是數組中被創建。

我將不勝感激所有幫助。乾杯

馬克

+1

這個想法開始不好,以最高速度飛入可怕的。 ***爲什麼你覺得你想要這個? – 2012-07-17 05:38:22

回答

0

通常被稱爲在其他漢語語言「拆分」,在PHP中,你想使用explode

編輯:實際上,你想要做的事聽起來......很危險。這是可能的(並且是PHP的一箇舊「特性」),但它強烈地阻止。我建議剛爆炸他們,使他們的價值觀的關聯數組,而不是鍵:

$choices_assoc = explode(',', $_POST['choices']); 
foreach ($choices as $choice) { 
    $choices_assoc[$choice] = $choice; 
} 
4

如何

$choices = explode(',', $_POST['choices']); 
foreach ($choices as $choice){ 
    $$choice = $choice; 
} 
+0

這是解決方案的正確代碼,但它會讓我的脊柱發抖。只有使用$$的PHP才能發生壞事。 – Fluffeh 2012-07-17 05:42:29

+0

@弗萊菲你能否詳細說明一下?我只是問,因爲我使用了很多變量變量,並且想知道過度使用它們會帶來什麼後果。謝謝 – asprin 2012-07-17 05:50:55

+0

我的大部分代碼都是用戶輸入驅動的,這意味着很多數據輸入不佳。我想要做的最後一件事是開始根據用戶輸入命名我的變量。如果他們的輸入以數字開頭,或者包含一個*,會怎樣?並不是說變量變量沒有價值,它是一個很酷的功能,它確實是,但我從來沒有將遊戲用於測試以外的任何其他功能。我從來都不想去審覈那些清潔水平的投入。用戶名:bob7#-3po我可以住,PHP試圖把它變成一個變量,我不能。 – Fluffeh 2012-07-17 06:07:21

1
$str = "apple,pear,pineapple"; 
$strArr = explode(',' , $str); 
foreach ($strArr as $val) { 
    $$val = $val; 
} 
var_dump($apple); 

這將滿足您的要求。然而,問題在於,因爲您無法預先確定有多少個變量以及它們是什麼,所以您很難正確使用它們。在使用$ VAR之前測試「isset($ VAR)」似乎是唯一安全的方法。

你最好將源字符串拆分成一個數組,然後只是操作特定數組的元素。

1

我必須同意所有其他答案,這是一個非常糟糕的主意,但每個現有的答案都使用了一種有點迂迴的方法來實現它。

PHP提供了一個函數extract來將數組中的變量提取到當前作用域中。您可以使用,在這種情況下,像這樣(使用爆炸,array_combine把你輸入到關聯數組在前):

$choices = $_POST['choices'] ?: ""; // The ?: "" makes this safe even if there's no input 
$choiceArr = explode(',', $choices); // Break the string down to a simple array 
$choiceAssoc = array_combine($choiceArr, $choiceArr); // Then convert that to an associative array, with the keys being the same as the values 
extract($choiceAssoc, EXTR_SKIP); // Extract the variables to the current scope - using EXTR_SKIP tells the function *not* to overwrite any variables that already exist, as a security measure 
echo $banana; // You now have direct access to those variables 

關於爲什麼這是一個不錯的辦法,以採取更多的信息,請參閱的討論現已棄用register_globals設置。總而言之,編寫不安全的代碼使得編寫代碼更加容易。