php - 在 PHP >= 5.3 中使用 array_walk 等函数(和类似函数)修改数组

标签 php arrays pass-by-reference

PHP 有一些很棒的函数(如 array_walk),可让您处理数组中的每个元素。它们通常是这样设置的,因此您可以将要处理的数组指定为第一个参数,将应用于每个元素的回调函数指定为第二个参数。这些函数返回指示成功的 bool 值,而不是您可能期望的修改后的数组的副本。如果要修改数组,则必须通过引用传递数组,如 array_walk(&$my_array, 'my_callback');

但是,在 PHP 5.3 及更高版本中,如果您通过引用传递给函数调用,则会收到 E_DEPRECATED 错误。

有谁知道(如果存在的话)使用这些函数修改数组而不触发错误并且不显式抑制它们的正确方法?这些旧的数组处理函数是否有更新的替代方法。

最佳答案

在 PHP >= 5.3 中,值通过引用隐式传递,由函数定义决定。

array_walk() 的函数定义:

bool array_walk ( array &$array , callable $funcname [, mixed $userdata = NULL ] )

注意&$array。因此,您不需要在 PHP >= 5.3 的函数调用中通过引用显式传递数组。

array_walk($my_array, 'my_callback');

但是,您需要确保回调相应地通过引用接受它的值(如nickb 所示)。

另请查看 PHP 5.4 Call-time pass-by-reference - Easy fix available?

关于php - 在 PHP >= 5.3 中使用 array_walk 等函数(和类似函数)修改数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11616525/

相关文章:

java - 有 Intent 地在 2 个 Activity 之间传递数组

javascript - 如何将一个函数值传递给另一个 in - angular 2 服务

c++ - 它是通过指针传递的吗?

c++ - ( variable = &anotherVar ) 的大小是多少

带标题的 PHP 文件下载

php - 斜线附加到我的所有帖子中

php - 在 session 中添加相同数组键的数组值

php - 预期响应代码 220 但得到代码 ""和消息 ""

php - PHP 多维数组分割

php - 向 mysql 中插入多行