2012-07-17 36 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设置。总而言之,编写不安全的代码使得编写代码更加容易。