【问题标题】:Outputing an array elements as variables inside a function's parameter将数组元素作为函数参数内的变量输出
【发布时间】:2018-08-23 21:33:09
【问题描述】:

假设我有以下数组,我如何将其作为变量输出?

$required = array('fname', 'email','lname');

例如像这样:$fname,$email,$lname

我想将该数组作为函数参数输出(按确切顺序)

像这样: $mymail=smtpmailer($to, [required array here]);

所以不知何故,我只想编辑数组,其中元素将动态解析为函数的参数作为变量

【问题讨论】:

  • 你不用,你用数组索引$mymail = smtpmailer($required[0], $required[1], $required[2])
  • variable variables。但是,如果您认为需要这样做,那么使用关联数组几乎总是更好。
  • 使用extract()函数
  • @ChadK,这是完全可能的。为什么他不能?
  • @Rafael 我对这个问题的理解是,他想在不首先定义变量的情况下从数组动态创建变量。我知道可变变量,但这些都是荒谬的,坦率地说,糟糕的设计

标签: php arrays function


【解决方案1】:

假设您想要传递 存储在变量中的值,这些变量的名称由 $required 中的元素标识,它会是这样的(使用足够新的 PHP 版本)。

$fname = "John"; 
$email = "john@example.com";
$lname = "Doe";

$mymail = smtpmailer($to, ...array_values(compact(...$required)));

但是,如果您想将 $required 传递到 smtpmailer() 函数,那么您需要

$required = ["John", "john@example.com", "Doe"]; 
$mymail = smtpmailer($to, ...$required);

【讨论】:

    【解决方案2】:

    所以你想创建动态变量。

    假设您使用的是关联数组:

    $required = array(
        "fname" => "First name",
        "lname" => "Last name",
        "email" => "someone@example.com"
    );
    

    以下是创建$fname$lname$email变量的方法:

    foreach ($required as $key => $value) {
        ${$key} = $value;
    }
    

    现在您可以使用名称来引用变量,例如:

    echo $email; //Output someone@example.com
    

    【讨论】:

      【解决方案3】:

      如果数组没有键并且始终保持相同的顺序,您可以使用语言构造 list

      例如:

      $required = array('John', 'joh.doe@example.com','Doe');
      list($fname, $email, $lname) = $required;
      $mymail = smtpmailer($to, $fname,$email,$lname);
      

      【讨论】:

        【解决方案4】:

        如果您希望将这些文本元素 'to'、'fname'、'lname' 和 'email' 与值一起成为关联数组的键,如下例所示,您可以使用如下所示的 'extract' 函数

        $required = array('to'=>'bobmartin@gmail.com','fname'=>'Bob', 'email'=>'grags@gmail.com','lname'=>'Martin');
        extract($required);
        $mymail=smtpmailer($to, $fname,$email,$lname);
        

        否则,如果您已经在顶部某处为变量 $to、$fname、$email 和 $lname 定义了值,并且您希望动态地使这些字符串成为变量并需要传递给函数,您应该使用eval 函数将每个字符串动态转换为变量,并使用 call_user_func_array 动态传递这些值,如下所示

        $required = array('to','fname', 'email','lname');
        $inputar = array();
        foreach($required as $el)
               array_push($inputar,eval('return $'. $el . ';'));
        call_user_func_array("smtpmailer", $inputar);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-09-13
          • 2011-06-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-05-24
          相关资源
          最近更新 更多