如何将数组元素作为单独参数传递给函数进行扩展

16

我有一个颜色数组,它的值是动态的,取决于数据库。现在这些值需要传递给一个函数,该函数只接受像这样的值 function('para1','para2','para3','para4'),其中param1到param4是颜色数组中的颜色值。 问题是如何以上述格式将这些值解析到该函数中。需要编写编程逻辑。语言为PHP。

假设动态数组是color[]=('red','maroon','blue','green'); 并且这些值应该像这样传递给该函数:setLineColor('red','maroon','blue','green');

我使用这个函数来创建图表。(Lib using PHP_graphlib: link: http://www.ebrueggeman.com/phpgraphlib/documentation.php) 欢迎提供其他建议的库。请提供一个简单的示例。

3个回答

38
自 PHP 5.6 起,您可以使用三个点的运算符 argument unpacking 来进行参数展开:
setLineColor(...$colors);

2
非常好,比call_user_func_array更容易阅读,而且也很实用,如果你想将“固定”的参数与类似于fprintf(STDOUT, $format,...$args)的数组组合起来。 - DBX12

22
你可以使用函数call_user_func_array
<?php
$colors = array('red','maroon','blue','green');
call_user_func_array('setLineColor', $colors);
?>

如果您想调用对象的方法,您可以使用 this:

<?php
$graph = new ...
$colors = array('red','maroon','blue','green');
call_user_func_array(array($graph, 'setLineColor'), $colors);
?>

是的,Enrico,谢谢您提供这么有意思的回答。抱歉,我没有提到这是某个库的方法。 - Aakash Sahai

-5
function($color[0], $color[1], $color[2], $color[3])

最差的答案……我认为你没有读到颜色值不是固定的,它们取决于数据库值的变化。 - Aakash Sahai
我知道它们不是固定的 - 这就是为什么我在引用包含动态值的数组。 - Adam Hopkinson
如果您事先不知道值的数量,此答案无效。如果数组有,比如说,500个值,这也是一个糟糕的解决方案。 - Andrew Schulman
谢谢安德鲁,但那不是原问题的一部分。 - Adam Hopkinson
我同意Adam的观点。在这个问题中,参数的数量是已知的。因此,这是最好的答案。在这种情况下,不需要调用“call_user_func_array”。 - Byscripts

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接