array_walk参数用户数据已修改


array_walk params userdata modified

我在应用程序中发现了一些奇怪的东西。

很难描述我的问题,因为我不能和你分享一个可复制的样本。

主要问题是关于array_walk函数的第三个参数。

$row = array("user_id" => 1, "first_name" => "bobby");
$data = array("user_id" => "fc_name", "first_name" => "fc2_name", "email" => "fc3_name");
$res = array_walk( $row, 'fu', $aParams);
function fu(&$cell, $key, $data) {
    return call_user_func_array($data[$cell], array($cell, $key, $data));
}

当我运行脚本时,它被中止,没有任何错误。调试后,我发现$data被修改,变成了一个递归数组。

Array
 *RECURSION*

我不明白的是,$data在通过副本传递时是如何修改的?我知道您没有关于执行的所有信息,而且在call_user_func_array中还有许多其他调用。

感谢

PS:我用Xdebug记录所有跟踪,但我找不到奇怪的东西。


UPDATE1:如果我在foreach循环中翻译array_walk,没有问题

UPDATE2:Update1让我明白了问题不是纯粹的PHP代码,这就是为什么我在寻找"堆栈溢出"(真实的:))或段错误。我在php的官方错误报告中发现了这个错误https://bugs.php.net/bug.php?id=61730并且我的php版本没有固定(5.3.2)我检查了我的数组。c.这个场景与我的很接近,所以我会在可能的时候更新php(企业流程…)。

我期待很多这样的修复。

PHP错误https://bugs.php.net/bug.php?id=61730已在php 5.3.10上修复刚刚更新的php