function heaviside(&$value, $key, &$array)
{
if($key > 0)
$value = $array[$key-1].$array[$key];
}
function test_heaviside()
{
for($i=0; $i<10; $i++)
{
$array[$i] = $i;
}
array_walk($array, 'heaviside', &$array);
print_r($array);
}
test_heaviside();
我的问题是上面的代码会生成此警告:
PHP警告:通话时间 pass-by-reference已被弃用 - 按值传递的参数;如果您想通过参考传递, 修改声明 array_walk()。如果你愿意的话 启用呼叫时间传递引用, 你可以设置 allow_call_time_pass_reference为true 在你的INI文件中。但是,未来 版本可能不支持这个 更长的时间。
如果我删除&amp;在我调用array_walk的&amp; $数组中,此函数不会返回此正确的结果。在第一种情况下,它工作的地方,它返回这个结果:
[0] => 0 [1] => 01 [2] => 012 [3] => 0123 [4] => 01234 [5] => 012345 [6] => 0123456 [7] => 01234567 [8] => 012345678 [9] => 0123456789
然而,如果我删除&amp;它返回:
[0] => 0 [1] => 01 [2] => 12 [3] => 23 [4] => 34 [5] => 45 [6] => 56 [7] => 67 [8] => 78 [9] => 89
我需要帮助理解这一点,或者只是找到一个解决方案而不是改变.ini。
答案 0 :(得分:4)
注意:a上没有参考标记 函数调用 - 仅在函数上 定义。功能定义 单独就足以正确传递 参考的论点。截至PHP 5.3.0,你会收到一条警告说“通过参考传递通话”是 使用&amp;时弃用在 FOO(安培; $ A);
这意味着你不能告诉参数是一个参考。只有函数定义才能执行此操作。如果你查看array_walk manual page,你会发现只有第一个参数是引用,而最后一个参数不能。
所以最后,你想要的是弃用了。你可以
答案 1 :(得分:2)
你在这里滥用array_walk
- 你的回调函数实际上没有返回新值。 array_walk
旨在使用目标数组中的一个且仅有一个值,并且无法通过引用处理任何内容。
您可以使用简单的for循环来实现您正在寻找的效果:
// Set up the array.
$array = array();
for($i = 0; $i < 10; $i++)
$array[$i] = $i;
// Process it, starting at the second element
for($i = 1; $i < count($array); $i++)
$array[$i] = $array[$i - 1] . $array[$i];
print_r($array);