【问题标题】:Convert array element to variable将数组元素转换为变量
【发布时间】:2012-12-11 12:08:15
【问题描述】:

鉴于,

$required_fields = array('name', 'location', 'email');                               
foreach ($required_fields as $fieldname) {
    if (isset($_POST[$fieldname]) || !empty($_POST[$fieldname])) {      


        }

现在在 if 语句中,我需要类似的东西

$fieldname = $_POST[$fieldname]; 

让我得到

$name = "name"、$location = "location" 和 $email = "email"

我试过 $fieldname = $_POST[$fieldname] 但它不起作用。我怎样才能动态地做到这一点?

【问题讨论】:

    标签: php arrays variables


    【解决方案1】:

    你这样做,

    $$fieldname = $_POST[$fieldname]; 
    

    这个$$ 表示法称为variable variable

    【讨论】:

      【解决方案2】:

      您可以为此使用extract function。要过滤数组,您可以使用array_diff function

      【讨论】:

      • 也可以用来查看 - Is using extract($_POST) insecure?
      • extract() 有可能会用新变量覆盖您现有的变量,这就是调试地狱
      • @ianace 分配有问题的变量是一个调试地狱。
      【解决方案3】:
      $required_fields = array('name', 'location', 'email');
      extract(array_intersect_keys($_POST, array_flip($required_fields)));
      

      这将为$required_fields 中命名的每个变量创建局部变量,前提是它存在于 $_POST 数组中。否则,该变量将是未定义的。

      array_flip
      array_intersect_key
      extract

      【讨论】:

        【解决方案4】:

        你也可以使用

        eval("$".$fieldname."='".$_POST["fieldname"]."';");
        

        【讨论】:

        • 为什么要调用一个新的 PHP 解释器?
        • 这是如何解决问题的另一个示例。虽然如果没有正确验证这些值也是危险的。最终结果与您给定的解决方案相同。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-08
        • 2016-12-22
        • 2020-04-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多