【问题标题】:PHP - How to split array into variables and pass to a function?PHP - 如何将数组拆分为变量并传递给函数?
【发布时间】:2019-01-07 17:47:58
【问题描述】:

PHP 中有一些函数具有不同数量的参数。我不知道要调用哪个函数,但是函数及其参数作为数组传递给调用函数

function func1($a,$b){...}
function func2($a){...}
$calls  = [func1=>[arg1, arg2], func2=>[arg1]]

我需要调用每个函数及其参数。我不知道如何将参数作为不同的变量传递。这是我的代码

$func_names = array_keys($calls);
$i = 0;
foreach($calls as $call){
    $func_names[$i]($calls[$func_names[$i++]]);
    //$func_names[$i]($call); same as above line
}

在每次迭代中,每个函数的参数数组都被传递给函数,而不是数组中的每一项。我该如何解决这个问题?

谢谢

【问题讨论】:

标签: php


【解决方案1】:

使用call_user_func_array

mixed call_user_func_array ( callable $callback , array $param_arr )

链接的 PHP 手册中的示例 -

<?php
function foobar($arg, $arg2) {
    echo __FUNCTION__, " got $arg and $arg2\n";
}
class foo {
    function bar($arg, $arg2) {
        echo __METHOD__, " got $arg and $arg2\n";
    }
}


// Call the foobar() function with 2 arguments
call_user_func_array("foobar", array("one", "two"));

// Call the $foo->bar() method with 2 arguments
$foo = new foo;
call_user_func_array(array($foo, "bar"), array("three", "four"));
?>

【讨论】:

  • 非常完美和干净的答案。谢谢
【解决方案2】:
<?php

function a($foo) {
    echo $foo, "\n";
}
function b($bar, $baz) {
    echo $bar, ' and ', $baz, "\n";
}

$calls  = ['a'=>['apples'], 'b'=>['bananas','banjos']];

foreach($calls as $k => $v) $k(...$v);

输出:

apples
bananas and banjos

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-28
    • 2015-12-17
    • 1970-01-01
    • 2015-06-08
    • 2015-07-10
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    相关资源
    最近更新 更多