【问题标题】:PHP get array() value to become $variablePHP 获取 array() 值成为 $variable
【发布时间】:2012-07-17 05:34:49
【问题描述】:

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

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

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

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

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

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

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

感谢所有帮助。干杯

标记

【问题讨论】:

  • 这个想法一开始很糟糕,然后以最快的速度飞到了可怕的地步。 为什么你认为你想要这个?

标签: php arrays variables


【解决方案1】:

怎么样

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

【讨论】:

  • 这是解决方案的正确代码,但它让我脊背发凉。使用 $$ 在 PHP 中只会发生坏事。
  • @Fluffeh 你能详细说明一下吗?我只是问,因为我经常使用可变变量,并且想知道过度使用它们可能会产生什么后果。谢谢
  • 我的大部分代码都是用户输入驱动的,这意味着很多糟糕的数据输入。我想做的最后一件事是开始根据用户输入命名我的变量。如果他们的输入以数字开头,或者其中包含 * 怎么办?并不是说变量变量没有值,这是一个很酷的功能,确实如此,但我从来没有在测试以外的任何地方使用它。我从来不想去审查输入的清洁度。用户名:bob7#-3po 我可以忍受,PHP 试图把它变成一个变量,我不能。
【解决方案2】:
$str = "apple,pear,pineapple";
$strArr = explode(',' , $str);
foreach ($strArr as $val) {
    $$val = $val;
}
var_dump($apple);

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

你最好将源字符串拆分为一个数组,只对特定数组的元素进行操作。

【讨论】:

    【解决方案3】:

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

    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 设置的讨论。简而言之,它使编写不安全的代码变得非常容易。

    【讨论】:

      【解决方案4】:

      在其他语言中通常称为“拆分”,在 PHP 中,您可能希望使用 explode

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多