0

好的,所以我有这个数组:

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

当使用 var_dump() 时,这个输出:

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

我需要的是那些成为变量的值以及作为字符串添加的值。所以,我需要输出是:

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

数组的值可能会改变,因此必须根据该数组中的内容创建变量。

我将不胜感激所有帮助。干杯

标记

4

4 回答 4

4

怎么样

$choices = explode(',', $_POST['choices']);
foreach ($choices as $choice){
    $$choice = $choice;
}
于 2012-07-17T05:38:35.513 回答
1
$str = "apple,pear,pineapple";
$strArr = explode(',' , $str);
foreach ($strArr as $val) {
    $$val = $val;
}
var_dump($apple);

这将满足您的要求。然而,问题来了,因为你无法预先定义有多少变量以及它们是什么,你很难正确使用它们。在使用 $VAR 之前测试“isset($VAR)”似乎是唯一安全的方法。

您最好将源字符串拆分为一个数组,然后只操作特定数组的元素。

于 2012-07-17T05:59:20.643 回答
1

我必须同意所有其他答案,即这是一个非常糟糕的主意,但是每个现有答案都使用一种有点迂回的方法来实现它。

PHP 提供了一个函数extract,用于将数组中的变量提取到当前作用域中。在这种情况下,您可以像这样使用它(首先使用 explode 和 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设置的讨论。简而言之,它使编写不安全的代码变得容易得多。

于 2012-07-17T06:22:48.073 回答
0

在其他语言中通常称为“拆分”,在 PHP 中,您会想要使用explode

编辑:实际上,您想做的事情听起来……很危险。这是可能的(并且是 PHP 的一个旧“功能”),但强烈反对。我建议只是分解它们并将它们的值作为关联数组的键:

$choices_assoc = explode(',', $_POST['choices']);
foreach ($choices as $choice) {
    $choices_assoc[$choice] = $choice;
}
于 2012-07-17T05:37:37.587 回答