PHP将所有参数作为数组获取?

Posted

技术标签:

【中文标题】PHP将所有参数作为数组获取?【英文标题】:PHP get all arguments as array? 【发布时间】:2010-10-24 03:27:04 【问题描述】:

嘿,我正在使用一个 php 函数,该函数接受多个参数并对其进行格式化。目前,我正在处理这样的事情:

function foo($a1 = null, $a2 = null, $a3 = null, $a4 = null)
    if ($a1 !== null) doSomethingWith($a1, 1);
    if ($a2 !== null) doSomethingWith($a2, 2);
    if ($a3 !== null) doSomethingWith($a3, 3);
    if ($a4 !== null) doSomethingWith($a4, 4);

但我想知道我是否可以使用这样的解决方案:

function foo(params $args)
    for ($i = 0; $i < count($args); $i++)
        doSomethingWith($args[$i], $i + 1);

但仍以相同的方式调用函数,类似于 C# 中的 params 关键字或 javascript 中的 arguments 数组。

【问题讨论】:

【参考方案1】:

func_get_args 返回一个包含当前函数所有参数的数组。

【讨论】:

一个值得指出的 func_get_args 陷阱;你不能将它传递给另一个函数调用。 @Rob 你可以去$args = func_get_args()然后call_user_func_array($func, $args) func_get_args() 仅返回传递给函数调用的那些参数的值,而不是函数定义中定义的所有参数。 我可以这样做:func_get_args('argument_name') 吗?获取参数的值。 @FranciscoCorralesMorales 您无法通过参数名称获取值,但如果您可以使用参数偏移量,则可以使用func_get_arg()。【参考方案2】:

如果您使用 PHP 5.6+,您现在可以这样做:

<?php
function sum(...$numbers) 
    $acc = 0;
    foreach ($numbers as $n) 
        $acc += $n;
    
    return $acc;


echo sum(1, 2, 3, 4);
?>

来源:http://php.net/manual/en/functions.arguments.php#functions.variable-arg-list

【讨论】:

【参考方案3】:

或者从 PHP 7.1 开始,您现在可以使用名为 iterable

的类型提示
function f(iterable $args) 
    foreach ($args as $arg) 
        // awesome stuff
    

此外,当您使用接口进行迭代时,可以使用它来代替Traversable。它还可以用作生成参数的生成器。

Documentation

【讨论】:

以上是关于PHP将所有参数作为数组获取?的主要内容,如果未能解决你的问题,请参考以下文章

尝试获取按 id 过滤的所有行并将它们作为数组(mysql,php)返回

是否可以将函数的所有参数作为该函数内的单个对象获取?

在 Python 中获取数组作为 GET 查询参数

使用 jquery ajax 将 javascript 数组变量发送到 php 脚本(获取字符串作为输出而不是数组)

如何获取作为数组工作的存储过程输出参数?

使用 JavaScript 将两个数组的所有可能组合作为数组数组获取