PHP中如何将数组作为参数,在PHP中将数组作为参数而不是数组传递

我似乎记得在PHP中有一种方法可以将数组作为函数的参数列表传递,以标准的func($arg1, $arg2)方式取消引用数组。 但是现在我迷失了如何做。 我记得通过引用传递的方式,如何"遍历"传入的参数……但没有如何将数组从列表中除名。

它可能和func(&$myArgs)一样简单,但是我很确定不是。 但是,可悲的是,到目前为止,php.net手册还没有透露任何内容。 并不是说我在过去一年左右的时间里不得不使用此特定功能。

http://www.php.net/manual/zh/function.call-user-func-array.php

我可能发誓说它也是一个无功能的东西,例如前缀字符或其他东西。谢谢。

是的,但是在PHP中不是。在Python中;-)

但是我不知道Python!我一定是意外的心理...:D

所谓的参数解压缩将在PHP 5.6(wiki.php.net/rfc/argument_unpacking)中添加。它将使用splat运算符:...。其语法:$args = [1,2,3]; function(...$args){}

但是,如果您希望调用的函数是对象上的实例方法,而不是全局空间中的函数名,该怎么办?

@ahnbizcad,那么您应该使用callable,它使用相同的call_user_func_array,仅用于数组,其中第一个元素是对象,第二个是方法。例如call_user_func_array([$object, method], $myArgs);

如前所述,从PHP 5.6+起,您可以(应该!)使用...令牌(又称" splat运算符",是可变函数功能的一部分),可以轻松地调用带有参数数组的函数:

function variadic($arg1, $arg2)

{

// Do stuff

echo $arg1.' '.$arg2;

}

$array = ['Hello', 'World'];

// 'Splat' the $array in the function call

variadic(...$array);

// 'Hello World'

注意:数组项是根据其在数组中的位置而不是其键映射到参数的。

根据CarlosCarucce的评论,这种形式的参数解压缩是迄今为止所有情况下最快的方法。在某些比较中,它比call_user_func_array快5倍以上。

在旁边

因为我认为这确实有用(尽管与问题没有直接关系):您可以在函数定义中键入splat运算符参数,以确保所有传递的值都与特定类型匹配。

(请记住,这样做必须是您定义的最后一个参数,并将传递给函数的所有参数捆绑到数组中。)

确保数组包含特定类型的项目非常有用:

// Define the function...

function variadic($var, SomeClass ...$items)

{

// $items will be an array of objects of type `SomeClass`

}

// Then you can call...

variadic('Hello', new SomeClass, new SomeClass);

// or even splat both ways

$items = [

new SomeClass,

new SomeClass,

];

variadic('Hello', ...$items);

与call_user_func_array相比,这具有很大的性能改进。因此,如果您使用的是php 5.6+,则推荐使用此版本。这是一个测试,在官方php Wiki中被引用

确实不幸的是,这并不是明显的答案。绝对更好

还要注意,如果要将实例方法应用于数组,则需要将该函数传递为:

call_user_func_array(array($instance,"MethodName"), $myArgs);

@understack链接页面上的$foo->bar()示例建议应为array($instance,"MethodName")。

太棒了,我用它来避免在子类中重复构造函数参数:) call_user_func_array(array(parent,"__construct"), func_get_args());

为了完整起见,从PHP 5.1开始,这也适用:

function title($title, $name) {

return sprintf("%s. %s

", $title, $name);

}

$function = new ReflectionFunction('title');

$myArray = array('Dr', 'Phil');

echo $function->invokeArgs($myArray);  // prints"Dr. Phil"

?>

请参阅:http://php.net/reflectionfunction.invokeargs

对于方法,请改用ReflectionMethod :: invokeArgs并将对象作为第一个参数传递。

这实际上是我一直在寻找的!

好的,这是一个比较常见的前后端交互的问题。首先,你需要在 Vue 获取到前端传递过来的数组,然后将其发送到后端 PHP 接口。在 PHP 接口,你需要解析前端传递过来的数组,并将其插入到数据库。 下面是一个简单的实现过程: 1. Vue 中将数组传递PHP 接口 在 Vue ,你可以使用 axios 库来发送请求。首先,你需要将数组转换为 JSON 字符串,然后将其作为请求体发送到 PHP 接口。 ```javascript // 将数组转换为 JSON 字符串 const data = JSON.stringify(array) // 发送 POST 请求到 PHP 接口 axios.post('/api/addData.php', data) .then(response => { console.log(response.data) }) .catch(error => { console.log(error) }) ``` 2. PHP 接口解析数组并插入到数据库PHP 接口,你可以使用 $_POST 变量获取到前端传递过来的 JSON 字符串,并将其解析为 PHP 数组。然后,你可以使用 PHP 的数据库操作库(如 PDO)将数据插入到数据库。 ```php // 获取前端传递过来的 JSON 字符串 $data = json_decode(file_get_contents('php://input'), true); // 解析数组并插入到数据库 $conn = new PDO('mysql:host=localhost;dbname=test', 'username', 'password'); $stmt = $conn->prepare('INSERT INTO table_name (column1, column2, column3) VALUES (:value1, :value2, :value3)'); foreach ($data as $item) { $stmt->bindParam(':value1', $item['value1']); $stmt->bindParam(':value2', $item['value2']); $stmt->bindParam(':value3', $item['value3']); $stmt->execute(); } ``` 注意,这只是一个简单的示例,你需要根据自己的实际情况来进行修改。另外,为了安全起见,你需要对前端传递过来的数据进行验证和过滤,以防止 SQL 注入等安全问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值