【问题标题】:PHP Function Argument to an array数组的 PHP 函数参数
【发布时间】:2011-09-29 21:19:59
【问题描述】:

你能做这样疯狂的事吗

function cool_function($pizza, $ice_cream) { 

   make the arguments in the array into an array 
   return $array_of_paramaters // my new array 

} // end function 

print_r(cool_function); // outputs array(0 => pizza, 1=> ice cream)

【问题讨论】:

  • 你为什么需要这样的东西?
  • 当然你可以做这样的事情。你为什么要这样做?虽然您的示例:print_r(cool_function); 不起作用。

标签: php arrays function


【解决方案1】:

实际上,这很容易(请阅读手册:func_get_args — 返回包含函数参数列表的数组,另请参阅:Variable-length argument lists):

function cool_function($pizza, $ice_cream) { 
   return func_get_args();
}

但正如 cmets 中所问的,你为什么需要这个?

或者你需要变量名吗? Reflection Docs是你的朋友:

function cool_named($neutron, $electron)
{
    $f = new ReflectionFunction(__FUNCTION__);
    $p = array();    
    foreach($f->getParameters() as $p1)
        $p[] = '$'.$p1->name;

    return $p;
}

var_dump(cool_named());

还是两者兼而有之? (编辑:考虑了长度不足、可选和过长参数):

function overall($neutron, $electron, $quark = 'xiaro')
{
    $f = new ReflectionFunction(__FUNCTION__);
    $defined = $f->getParameters();
    $passed = func_get_args() + array_fill(0, count($defined), NULL);

    foreach($defined as &$param)
        $param = '$'.$param->name;

    return array_combine($defined + array_keys($passed), $passed);
}

var_dump(overall('clara', 'peter', 'moon', 'jupiter'));

【讨论】:

    【解决方案2】:

    我不确定您是在寻找 func_get_args,它返回传递给函数的所有参数,还是 ReflectionFunction 类。

    func_get_args 的基本示例:

    function cool_function($pizza, $ice_cream) { 
       return func_get_args();
    }
    

    但您不需要参数来完成这项工作:

    function cool_function() { 
       return func_get_args();
    }
    // cool_function(1,2,3) will return array(1,2,3)
    

    反射选项:

    /**
     * Returns an array of the names of this function
     */
    function getMyArgNames($a,$b,$c)
    {
        $args = array();
        $refFunc = new ReflectionFunction(__FUNCTION__);
        foreach( $refFunc->getParameters() as $param ){
             $args[] = $param->name;
        }
        return $args;
    }
    

    或者,对于真正疯狂的人:

    /**
     * Returns an associative array of the names of this function mapped 
     * to their values
     */
    function getMyArgNames($a,$b,$c)
    {
        $received = func_get_args();
        $i = 0;
        $args = array();
        $refFunc = new ReflectionFunction(__FUNCTION__);
        foreach( $refFunc->getParameters() as $param ){
             $args[$param->name] = $received[$i++];
        }
        // include all of those random, optional arguments.
        while($i < count($received)) $args[] = $received[$i++];
        return $args;
    }
    

    【讨论】:

      【解决方案3】:

      你是说

      function valuesToArray($value1,$value2){return array($value1,$value2);}
      

      【讨论】:

        【解决方案4】:

        如果我猜对了,你会是这样的:

        function cool_function($pizza, $ice_cream) {
           return array($pizza, $ice_cream);
        }
        

        但你可以简单地这样做:

        $new_var = array($pizza, $ice_cream);
        

        【讨论】:

          猜你喜欢
          • 2012-04-28
          • 2010-12-20
          • 1970-01-01
          • 2012-04-28
          • 1970-01-01
          • 2011-09-25
          • 2012-04-07
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多