【问题标题】:Pass Associative Array to Function in PHP将关联数组传递给 PHP 中的函数
【发布时间】:2013-03-21 04:24:56
【问题描述】:

我很想知道是否有某种方法可以使用关联数组来调用函数来声明参数。

例如,如果我有这个功能:

function test($hello, $world) {
    echo $hello . $world;
}

有什么办法可以称它为这样的事情吗?

call('test', array('hello' => 'First value', 'world' => 'Second value'));

我熟悉使用call_user_funccall_user_func_array,但我正在寻找更通用的东西,当我不知道他们提前寻找什么参数时,我可以用它来调用各种方法。

编辑: 这样做的原因是为 API 前端制作单个接口。我接受 JSON 并将其转换为数组。因此,我希望调用不同的方法并将 JSON 输入中的值传递给方法。 由于我希望能够从此接口调用各种不同的方法,因此我想要一种将参数传递给函数的方法,而无需知道它们需要采用什么顺序。我在想使用反射会给我带来我的结果我正在寻找。

【问题讨论】:

  • 您有什么理由为什么想要这样做?
  • 用于 API 前端。我接受 JSON 并将其转换为数组。因此,我希望调用不同的方法并将 JSON 输入中的值传递给方法。

标签: php function associative-array


【解决方案1】:

查看call_user_func_array的php手册

另外,查找令牌运算符 (...)。这是一种在 PHP 中将可变参数与函数一起使用的方法。你可以这样声明:-

function func( ...$params)
{
    echo $params[0] . ',' . parama[1];
}

【讨论】:

    【解决方案2】:

    你可以在你的函数func_get_args()内部使用这个函数

    所以,你可以像这样使用它:

    function test() {
         $arg_list = func_get_args();
         echo $arg_list[0].' '.$arg_list[1]; 
    }
    
    test('hello', 'world');
    

    【讨论】:

      【解决方案3】:

      使用 PHP 5.4+,可以正常工作

      function test($assocArr){
        foreach( $assocArr as $key=>$value ){
          echo $key . ' ' . $value . ' ';
        }
      }
      
      test(['hello'=>'world', 'lorem'=>'ipsum']);
      

      【讨论】:

        【解决方案4】:

        以下应该可以工作...

        function test($hello, $world) {
          echo $hello . $world;
        }
        
        $callback = 'test'; <-- lambdas also work here, BTW
        
        $parameters = array('hello' => 'First value', 'world' => 'Second value');
        
        $reflection = new ReflectionFunction($callback);
        $new_parameters = array();
        
        foreach ($reflection->getParameters() as $parameter) {
          $new_parameters[] = $parameters[$parameter->name];
        }
        
        $parameters = $new_parameters;
        
        call_user_func_array($callback, $parameters);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-04-17
          • 2013-07-05
          • 2012-07-19
          • 2013-01-16
          相关资源
          最近更新 更多