如何将PHP函数的参数列表转换为关联数组?

Fra*_*rth 9 php arrays parameters arguments associative

我想将函数的参数转换为关联数组,其中键等于参数变量名,值等于参数值.

PHP:

function my_function($a, $b, $c) {

    // <--- magic goes here to create the $params array

    var_dump($params['a'] === $a); // Should result in bool(true)
    var_dump($params['b'] === $b); // Should result in bool(true)
    var_dump($params['c'] === $c); // Should result in bool(true)
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

nic*_*ckf 12

你可以这样做compact:

function myFunc($a, $b, $c) {
    $params = compact('a', 'b', 'c');
    // ...
}
Run Code Online (Sandbox Code Playgroud)

或者,get_defined_vars()会给你在范围内定义的所有变量,将工作的关联数组,但我认为这也可能包括$_POST,$_GET等...

否则,您可以使用func_get_args获取传递给函数的所有参数的列表.这不是关联的,因为它只传递数据(也就是说,没有变量名).这也允许您在函数中包含任意数量的参数.

或者,只需指定一个参数,即一个数组:

function myFunc($params) {

}
Run Code Online (Sandbox Code Playgroud)

compact() 似乎最接近你所追求的.


San*_*tty 9

如果在函数内部调用之前没有定义其他变量,则需要get_defined_vars()(您可以通过将其作为函数内部的第一件事来确保这一点).

function my_function($a, $b, $c) {

    $params = get_defined_vars(); // <--- create the $params array

    var_dump($params['a'] === $a); // results in bool(true)
    var_dump($params['b'] === $b); // results in bool(true)
    var_dump($params['c'] === $c); // results in bool(true)
}
Run Code Online (Sandbox Code Playgroud)